import {dbProvider} from "./db-provider"; import {value as fetchUserPermissionGroups} from "./db-permission-fetch-user-permission-groups_sql"; import {value as fetchUserPermissions} from "./db-permission-fetch-user-permissions_sql"; export function dbPermissionCtor(dbProvider) { async function execute({userId}) { const dbs = await dbProvider(); const db = dbs.read; const userPermissionGroups = await db.any(fetchUserPermissionGroups, {userId}); const userPermissions = await db.any(fetchUserPermissions, {userId}); const permissions = Object.create({}); // apply groups first, then user based overrides const allPermissionOperationsInOrder = userPermissionGroups.concat(userPermissions); for (const {permission_name: permissionName, reltype: relType} of allPermissionOperationsInOrder) { switch (relType) { case "add": permissions[permissionName] = true; break; case "remove": delete permissions[permissionName]; delete permissions[`+${permissionName}`]; break; case "add_grant": permissions[permissionName] = true; permissions[`+${permissionName}`] = true; break; default: break; } } return permissions; } return { execute, dbProvider, }; } export const dbPermission = dbPermissionCtor(dbProvider).execute;