2020-06-18 11:41:12 +02:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const { validateHasPermissionsInput } = require('../../validation/policies/hasPermissions');
|
|
|
|
|
|
|
|
module.exports = permissions => {
|
|
|
|
try {
|
|
|
|
validateHasPermissionsInput(permissions);
|
|
|
|
} catch {
|
|
|
|
throw new Error('Invalid objects submitted to admin::hasPermissions policy.');
|
|
|
|
}
|
|
|
|
|
2020-06-18 11:45:25 +02:00
|
|
|
return (ctx, next) => {
|
2020-06-18 11:41:12 +02:00
|
|
|
const { userAbility: ability } = ctx.state;
|
|
|
|
|
|
|
|
const isAuthorized = permissions.every(({ action, subject }) => ability.can(action, subject));
|
|
|
|
|
|
|
|
if (!isAuthorized) {
|
|
|
|
throw strapi.errors.forbidden();
|
|
|
|
}
|
|
|
|
|
|
|
|
return next();
|
|
|
|
};
|
|
|
|
};
|