UNPKG

@r1tsu/payload

Version:

65 lines (64 loc) 2.81 kB
import { getEntityPolicies } from '../utilities/getEntityPolicies.js'; import isolateObjectProperty from '../utilities/isolateObjectProperty.js'; export async function getAccessResults({ req }) { const results = {}; const { payload, user } = req; const isLoggedIn = !!user; const userCollectionConfig = user && user.collection ? payload.config.collections.find((collection)=>collection.slug === user.collection) : null; if (userCollectionConfig) { results.canAccessAdmin = userCollectionConfig.access.admin ? await userCollectionConfig.access.admin({ req }) : isLoggedIn; } else { results.canAccessAdmin = false; } await Promise.all(payload.config.collections.map(async (collection)=>{ const collectionOperations = [ 'create', 'read', 'update', 'delete' ]; if (collection.auth && typeof collection.auth.maxLoginAttempts !== 'undefined' && collection.auth.maxLoginAttempts !== 0) { collectionOperations.push('unlock'); } if (collection.versions) { collectionOperations.push('readVersions'); } const collectionPolicy = await getEntityPolicies({ type: 'collection', entity: collection, operations: collectionOperations, // Do not re-use our existing req object, as we need a new req.transactionID. Cannot re-use our existing one, as this is run in parallel (Promise.all above) which is // not supported on the same transaction ID. Not passing a transaction ID here creates a new transaction ID. req: isolateObjectProperty(req, 'transactionID') }); results.collections = { ...results.collections, [collection.slug]: collectionPolicy }; })); await Promise.all(payload.config.globals.map(async (global)=>{ const globalOperations = [ 'read', 'update' ]; if (global.versions) { globalOperations.push('readVersions'); } const globalPolicy = await getEntityPolicies({ type: 'global', entity: global, operations: globalOperations, // Do not re-use our existing req object, as we need a new req.transactionID. Cannot re-use our existing one, as this is run in parallel (Promise.all above) which is // not supported on the same transaction ID. Not passing a transaction ID here creates a new transaction ID. req: isolateObjectProperty(req, 'transactionID') }); results.globals = { ...results.globals, [global.slug]: globalPolicy }; })); return results; } //# sourceMappingURL=getAccessResults.js.map