@opengis/fastify-table
Version:
core-plugins
37 lines (36 loc) • 1.4 kB
JavaScript
// import { type ExtendedRequest } from "../../../types/core.js";
import { pgClients, metaFormat, getAdminAccess } from "../../../../utils.js";
const q = `select a.route_id as id, coalesce(b.user_uid, d.user_uid) as user_uid, coalesce(d.actions, b.actions, array['view']) as actions, b.scope, c.role_id
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 (a.route_id, a.alias, a.table_name) and coalesce(b.user_uid, d.user_uid) is not null`;
export default async function accessInterface(req, reply) {
const { pg = pgClients.client, params = {}, user = {}, unittest } = req;
// restrict access - admin only
const check = await getAdminAccess({
id: params.name,
user,
});
if (check?.message && check?.status && !unittest) {
return reply.status(check?.status).send(check?.message);
}
const { rows = [] } = await pg.query(q, [params.name]);
const cls = {
user_uid: "core.user_uid",
actions: "core.actions",
role_id: "core.roles",
};
await metaFormat({ rows, cls, sufix: false });
return { rows };
}