@payloadcms/plugin-multi-tenant
Version:
Multi Tenant plugin for Payload
38 lines (37 loc) • 1.66 kB
JavaScript
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