UNPKG

@payloadcms/plugin-multi-tenant

Version:
38 lines (37 loc) 1.66 kB
import { combineWhereConstraints } from './combineWhereConstraints.js'; import { getTenantAccess } from './getTenantAccess.js'; export const withTenantAccess = ({ accessFunction, adminUsersSlug, collection, fieldName, tenantsArrayFieldName, tenantsArrayTenantFieldName, userHasAccessToAllTenants })=>async (args)=>{ const constraints = []; const accessFn = typeof accessFunction === 'function' ? accessFunction : ({ req })=>Boolean(req.user); const accessResult = await accessFn(args); if (accessResult === false) { return false; } else if (accessResult && typeof accessResult === 'object') { constraints.push(accessResult); } if (args.req.user && args.req.user.collection === adminUsersSlug && !userHasAccessToAllTenants(args.req.user)) { const tenantConstraint = getTenantAccess({ fieldName, tenantsArrayFieldName, tenantsArrayTenantFieldName, user: args.req.user }); if (collection.slug === args.req.user.collection) { constraints.push({ or: [ { id: { equals: args.req.user.id } }, tenantConstraint ] }); } else { constraints.push(tenantConstraint); } return combineWhereConstraints(constraints); } return accessResult; }; //# sourceMappingURL=withTenantAccess.js.map