68 lines
1.7 KiB
JavaScript
Raw Normal View History

'use strict';
const { createPermission } = require('../domain/permission');
const actionProvider = require('./action-provider');
const { validatePermissionsExist } = require('../validation/permission');
/**
* Delete permissions of roles in database
* @param rolesIds ids of roles
* @returns {Promise<array>}
*/
const deleteByRolesIds = rolesIds => {
return strapi.query('permission', 'admin').delete({ role_in: rolesIds });
};
/**
* Delete permissions
* @param ids ids of permissions
* @returns {Promise<array>}
*/
const deleteByIds = ids => {
return strapi.query('permission', 'admin').delete({ id_in: ids });
};
/**
* Find assigned permissions in the database
* @param params query params to find the permissions
* @returns {Promise<array<Object>>}
*/
const find = (params = {}) => {
return strapi.query('permission', 'admin').find(params, []);
};
/**
* Assign permissions to a role
* @param {string|int} roleID - role ID
* @param {Array<Permission{action,subject,fields,conditions}>} permissions - permissions to assign to the role
*/
const assign = async (roleID, permissions = []) => {
try {
await validatePermissionsExist(permissions);
} catch (err) {
throw strapi.errors.badRequest('ValidationError', err);
}
await strapi.query('permission', 'admin').delete({ role: roleID });
const permissionsWithRole = permissions.map(permission => {
return createPermission({ ...permission, role: roleID });
});
const newPermissions = [];
for (const permission of permissionsWithRole) {
const result = await strapi.query('permission', 'admin').create(permission);
newPermissions.push(result);
}
return newPermissions;
};
module.exports = {
find,
deleteByRolesIds,
deleteByIds,
assign,
provider: actionProvider,
};