UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

32 lines (31 loc) 1.33 kB
import { fetchGlobalAccessForRoles as _fetchGlobalAccessForRoles, fetchGlobalAccessForUser as _fetchGlobalAccessForUser, } from '@directus/utils/node'; import { withCache } from '../../utils/with-cache.js'; export const fetchGlobalAccess = withCache('global-access', _fetchGlobalAccess, ({ user, roles }, { ip }) => ({ user, roles, ip, })); const fetchGlobalAccessForRoles = withCache('global-access-roles', _fetchGlobalAccessForRoles, (roles, { ip }) => ({ roles, ip, })); const fetchGlobalAccessForUser = withCache('global-access-user', _fetchGlobalAccessForUser, (user, { ip }) => ({ user, ip, })); /** * Re-implements fetchGlobalAccess to add caching, fetches roles and user info separately so they can be cached and reused individually */ export async function _fetchGlobalAccess(accountability, context) { const access = await fetchGlobalAccessForRoles(accountability.roles, { knex: context.knex, ip: accountability.ip }); if (accountability.user !== undefined) { const userAccess = await fetchGlobalAccessForUser(accountability.user, { knex: context.knex, ip: accountability.ip, }); // If app/admin is already true, keep it true access.app ||= userAccess.app; access.admin ||= userAccess.admin; } return access; }