add didUpdateRolePermissions event

Signed-off-by: Pierre Noël <petersg83@gmail.com>
This commit is contained in:
Pierre Noël 2020-10-19 12:34:20 +02:00
parent fad9fda318
commit afa67add2b
4 changed files with 38 additions and 2 deletions

View File

@ -23,4 +23,15 @@ describe('Metrics', () => {
expect(countUsers).toHaveBeenCalledWith();
expect(countRoles).toHaveBeenCalledWith();
});
test('sendDidUpdateRolePermissions', async () => {
const send = jest.fn(() => Promise.resolve());
global.strapi = {
telemetry: { send },
};
await metricsService.sendDidUpdateRolePermissions();
expect(send).toHaveBeenCalledWith('didUpdateRolePermissions');
});
});

View File

@ -6,6 +6,11 @@ const sendDidInviteUser = async () => {
return strapi.telemetry.send('didInviteUser', { numberOfRoles, numberOfUsers });
};
const sendDidUpdateRolePermissions = async () => {
return strapi.telemetry.send('didUpdateRolePermissions');
};
module.exports = {
sendDidInviteUser,
sendDidUpdateRolePermissions,
};

View File

@ -63,6 +63,12 @@ const deleteByIds = ids => {
* @returns {Promise<*[]|*>}
*/
const createMany = async permissions => {
try {
await validatePermissionsExist(permissions);
} catch (err) {
throw strapi.errors.badRequest('ValidationError', err);
}
return strapi.query('permission', 'admin').createMany(permissions);
};
@ -97,6 +103,9 @@ const assign = async (roleId, permissions = []) => {
throw strapi.errors.badRequest('ValidationError', err);
}
const superAdmin = await strapi.admin.services.role.getSuperAdmin();
const isSuperAdmin = superAdmin && superAdmin.id === roleId;
const permissionsWithRole = permissions.map(permission =>
createPermission({
...permission,
@ -126,6 +135,10 @@ const assign = async (roleId, permissions = []) => {
permissionsToReturn.push(...createdPermissions.map(p => ({ ...p, role: p.role.id })));
}
if (!isSuperAdmin && (permissionsToAdd.length || permissionsToDelete.length)) {
await strapi.admin.services.metrics.sendDidUpdateRolePermissions();
}
return permissionsToReturn;
};
@ -279,6 +292,7 @@ const resetSuperAdminPermissions = async () => {
};
module.exports = {
createMany,
find,
deleteByRolesIds,
deleteByIds,

View File

@ -233,8 +233,14 @@ const createRolesIfNoneExist = async ({ createPermissionsForAdmin = false } = {}
authorPermissions.push(...getDefaultPluginPermissions({ isAuthor: true }));
// assign permissions to roles
await strapi.admin.services.permission.assign(editorRole.id, editorPermissions);
await strapi.admin.services.permission.assign(authorRole.id, authorPermissions);
editorPermissions.forEach(p => {
p.role = editorRole.id;
});
authorPermissions.forEach(p => {
p.role = authorRole.id;
});
await strapi.admin.services.permission.createMany(editorPermissions);
await strapi.admin.services.permission.createMany(authorPermissions);
if (createPermissionsForAdmin) {
await strapi.admin.services.permission.resetSuperAdminPermissions();