@opengis/fastify-table
Version:
core-plugins
81 lines (78 loc) • 2.8 kB
JavaScript
import config from "../../../../../config.js";
import { applyHook } from "../../../../../utils.js";
import getRedis from "../../../../plugins/redis/funcs/getRedis.js";
const rclient2 = getRedis({ db: 2 });
const q = `select
a.route_id as id,
/* coalesce(d.actions, array['view', 'edit','add','del']) as role_actions,
coalesce(b.actions, array['view']) as interface_actions, */
array_intersect(coalesce(b.actions, array['view']), coalesce(d.actions, array['view', 'edit','add','del'])) as actions,
b.scope,
c.role_id,
c.name as role_name
from admin.routes a
left join admin.role_access b on
a.route_id=b.route_id
left join admin.roles c on
b.role_id=c.role_id
and c.enabled
left join admin.user_roles d on
c.role_id=d.role_id
and (
case when
d.expiration is not null
then d.expiration > CURRENT_DATE
else 1=1
end
)
where $1 in (b.user_uid, d.user_uid)`;
export default async function getUserInfo(req) {
const payload = {
sessionID: req.session?.sessionId,
};
if (config.auth?.debug) {
const str = await rclient2.get(`${req.session?.sessionId}-sessionInfo`);
Object.assign(payload, {
redisUser: str ? JSON.parse(str) : null,
cookies: req.cookies,
});
}
if (!req.user) {
const hookData1 = await applyHook("afterUser", { payload });
return hookData1 || payload;
}
const userInfo = Object.fromEntries(Object.entries(req.user).filter(([key]) => !["salt", "password"].includes(key)));
const { rows = [] } = req.pg?.pk?.["admin.properties"]
? await req.pg.query(`select
property_key as key,
case
when property_text is not null then to_jsonb(property_text)
when property_int is not null then to_jsonb(property_int)
when property_json is not null then property_json::jsonb
end as val
from admin.properties
where property_key~'^(${config.settingKeys || "site|map|admin"})'`)
: {};
const settings = rows.reduce((p, { key, val }) => {
const [k1, k2] = key.split(".");
p[k1] = p[k1] || {};
p[k1][k2] = val;
return p;
}, {});
const access = req.pg?.pk?.["admin.role_access"] &&
req.pg?.pk?.["admin.user_roles"] &&
req.pg?.pk?.["admin.users"] &&
req.user?.uid
? await req.pg.query(q, [req.user.uid]).then((el) => el.rows || [])
: [];
Object.assign(payload, {
user: userInfo,
settings,
session: !config.auth?.debug
? { ...req.session, passport: null }
: req.session,
access,
});
const hookData = await applyHook("afterUser", { payload });
return hookData || payload;
}