strapi/packages/core/admin/server/policies/hasPermissions.js

39 lines
1015 B
JavaScript
Raw Normal View History

'use strict';
const _ = require('lodash');
const { createPolicy } = require('@strapi/utils').policy;
2021-08-25 15:16:17 +02:00
const { validateHasPermissionsInput } = require('../validation/policies/hasPermissions');
const inputModifiers = [
{
check: _.isString,
2022-08-08 23:33:39 +02:00
transform: (action) => ({ action }),
},
{
check: _.isArray,
2022-08-08 23:33:39 +02:00
transform: (arr) => ({ action: arr[0], subject: arr[1] }),
},
{
// Has to be after the isArray check since _.isObject also matches arrays
check: _.isObject,
2022-08-08 23:33:39 +02:00
transform: (perm) => perm,
},
];
module.exports = createPolicy({
name: 'admin::hasPermissions',
validator: validateHasPermissionsInput,
handler(ctx, config) {
const { actions } = config;
const { userAbility: ability } = ctx.state;
2022-08-08 23:33:39 +02:00
const permissions = actions.map((action) =>
inputModifiers.find((modifier) => modifier.check(action)).transform(action)
);
const isAuthorized = permissions.every(({ action, subject }) => ability.can(action, subject));
return isAuthorized;
},
});