UNPKG

@opengis/fastify-table

Version:

core-plugins

81 lines (78 loc) 2.8 kB
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; }