2020-05-29 17:23:42 +02:00
|
|
|
'use strict';
|
|
|
|
|
2020-05-28 13:02:06 +02:00
|
|
|
const { createPermission } = require('../domain/permission');
|
|
|
|
|
2020-05-29 17:23:42 +02:00
|
|
|
/**
|
|
|
|
* Delete permissions of roles in database
|
|
|
|
* @param params ids of roles
|
|
|
|
* @returns {Promise<array>}
|
|
|
|
*/
|
2020-05-29 11:09:17 +02:00
|
|
|
const deleteByRolesIds = rolesIds => {
|
|
|
|
return strapi.query('permission', 'admin').delete({ role_in: rolesIds });
|
|
|
|
};
|
|
|
|
|
2020-05-28 11:29:59 +02:00
|
|
|
/**
|
|
|
|
* 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, []);
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
2020-06-01 11:00:00 +02:00
|
|
|
* Assign permissions to a role
|
2020-05-28 11:29:59 +02:00
|
|
|
* @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 = []) => {
|
2020-06-05 14:25:44 +02:00
|
|
|
const existingPermissions = strapi.admin.services['permission-provider'].getAll();
|
2020-06-04 18:30:26 +02:00
|
|
|
for (let permission of permissions) {
|
|
|
|
const permissionExists = existingPermissions.find(
|
|
|
|
ep =>
|
|
|
|
ep.permissionId === permission.action &&
|
|
|
|
(ep.section !== 'contentTypes' || ep.subjects.includes(permission.subject))
|
|
|
|
);
|
|
|
|
if (!permissionExists) {
|
|
|
|
throw strapi.errors.badRequest(
|
|
|
|
`ValidationError', 'This permission doesn't exist: ${JSON.stringify(permission)}`
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
2020-05-28 11:29:59 +02:00
|
|
|
|
|
|
|
await strapi.query('permission', 'admin').delete({ role: roleID });
|
|
|
|
|
2020-05-28 13:02:06 +02:00
|
|
|
const permissionsWithRole = permissions.map(permission => {
|
|
|
|
return createPermission({ ...permission, role: roleID });
|
|
|
|
});
|
2020-05-28 11:29:59 +02:00
|
|
|
|
|
|
|
const newPermissions = [];
|
|
|
|
for (const permission of permissionsWithRole) {
|
|
|
|
const result = await strapi.query('permission', 'admin').create(permission);
|
|
|
|
newPermissions.push(result);
|
|
|
|
}
|
|
|
|
|
|
|
|
return newPermissions;
|
|
|
|
};
|
|
|
|
|
2020-05-29 11:09:17 +02:00
|
|
|
module.exports = {
|
2020-05-28 11:29:59 +02:00
|
|
|
find,
|
2020-05-29 11:09:17 +02:00
|
|
|
deleteByRolesIds,
|
2020-05-28 11:29:59 +02:00
|
|
|
assign,
|
2020-05-29 11:09:17 +02:00
|
|
|
};
|