34 lines
838 B
JavaScript
Raw Normal View History

'use strict';
const {
policy: { createPolicyFactory },
2021-04-29 13:51:12 +02:00
} = require('@strapi/utils');
2021-09-24 09:04:44 +02:00
const { validateHasPermissionsInput } = require('../validation/policies/hasPermissions');
module.exports = createPolicyFactory(
2021-09-24 09:35:25 +02:00
({ actions = [], hasAtLeastOne = false } = {}) => ({ ctx, strapi }) => {
const {
state: { userAbility, isAuthenticatedAdmin },
params: { model },
} = ctx;
if (!isAuthenticatedAdmin || !userAbility) {
2021-09-24 09:35:25 +02:00
return true;
}
const isAuthorized = hasAtLeastOne
? actions.some(action => userAbility.can(action, model))
: actions.every(action => userAbility.can(action, model));
if (!isAuthorized) {
throw strapi.errors.forbidden();
}
2021-09-24 09:35:25 +02:00
return true;
},
{
validator: validateHasPermissionsInput,
2021-08-06 18:09:49 +02:00
name: 'plugin::content-manager.hasPermissions',
}
);