mirror of
https://github.com/strapi/strapi.git
synced 2025-12-28 15:44:59 +00:00
Sync super admin permissions with locales list for localized subjects
This commit is contained in:
parent
a66e0269da
commit
e1f1c14c13
@ -13,12 +13,20 @@ const {
|
||||
differenceWith,
|
||||
differenceBy,
|
||||
} = require('lodash/fp');
|
||||
const { generateTimestampCode, stringIncludes } = require('strapi-utils');
|
||||
const {
|
||||
generateTimestampCode,
|
||||
stringIncludes,
|
||||
hooks: { createAsyncSeriesWaterfallHook },
|
||||
} = require('strapi-utils');
|
||||
const permissionDomain = require('../domain/permission');
|
||||
const { validatePermissionsExist } = require('../validation/permission');
|
||||
const { getService } = require('../utils');
|
||||
const { SUPER_ADMIN_CODE } = require('./constants');
|
||||
|
||||
const hooks = {
|
||||
willResetSuperAdminPermission: createAsyncSeriesWaterfallHook(),
|
||||
};
|
||||
|
||||
const ACTIONS = {
|
||||
publish: 'plugins::content-manager.explorer.publish',
|
||||
};
|
||||
@ -416,10 +424,13 @@ const resetSuperAdminPermissions = async () => {
|
||||
|
||||
permissions.push(...otherPermissions);
|
||||
|
||||
await assignPermissions(superAdminRole.id, permissions);
|
||||
const transformedPermissions = await hooks.willResetSuperAdminPermission.call(permissions);
|
||||
|
||||
await assignPermissions(superAdminRole.id, transformedPermissions);
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
hooks,
|
||||
sanitizeRole,
|
||||
create,
|
||||
findOne,
|
||||
|
||||
@ -42,4 +42,16 @@ const registerModelsHooks = () => {
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
strapi.db.lifecycles.register({
|
||||
model: 'plugins::i18n.locale',
|
||||
|
||||
async afterCreate() {
|
||||
await getService('permissions').actions.syncSuperAdminPermissionsWithLocales();
|
||||
},
|
||||
|
||||
async afterDelete() {
|
||||
await getService('permissions').actions.syncSuperAdminPermissionsWithLocales();
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
|
||||
const { capitalize, isArray } = require('lodash/fp');
|
||||
const { capitalize, isArray, getOr, prop } = require('lodash/fp');
|
||||
const { getService } = require('../../utils');
|
||||
|
||||
const actions = ['create', 'read', 'update', 'delete'].map(uid => ({
|
||||
@ -44,6 +44,48 @@ const shouldApplyLocalesPropertyToSubject = ({ property, subject }) => {
|
||||
return true;
|
||||
};
|
||||
|
||||
const addAllLocalesToPermissions = async permissions => {
|
||||
const { actionProvider } = strapi.admin.services.permission;
|
||||
const { find: findAllLocales } = getService('locales');
|
||||
|
||||
const allLocales = await findAllLocales();
|
||||
const allLocalesCode = allLocales.map(prop('code'));
|
||||
|
||||
return Promise.all(
|
||||
permissions.map(async permission => {
|
||||
const { action, subject } = permission;
|
||||
|
||||
const appliesToLocalesProperty = await actionProvider.appliesToProperty(
|
||||
'locales',
|
||||
action,
|
||||
subject
|
||||
);
|
||||
|
||||
if (!appliesToLocalesProperty) {
|
||||
return permission;
|
||||
}
|
||||
|
||||
const oldPermissionProperties = getOr({}, 'properties', permission);
|
||||
|
||||
return { ...permission, properties: { ...oldPermissionProperties, locales: allLocalesCode } };
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
const syncSuperAdminPermissionsWithLocales = async () => {
|
||||
const roleService = strapi.admin.services.role;
|
||||
const permissionService = strapi.admin.services.permission;
|
||||
|
||||
const superAdminRole = await roleService.getSuperAdmin();
|
||||
const superAdminPermissions = await permissionService.findUserPermissions({
|
||||
roles: [superAdminRole],
|
||||
});
|
||||
|
||||
const newSuperAdminPermissions = await addAllLocalesToPermissions(superAdminPermissions);
|
||||
|
||||
await roleService.assignPermissions(superAdminRole.id, newSuperAdminPermissions);
|
||||
};
|
||||
|
||||
const registerI18nActions = async () => {
|
||||
const { actionProvider } = strapi.admin.services.permission;
|
||||
|
||||
@ -52,8 +94,10 @@ const registerI18nActions = async () => {
|
||||
|
||||
const registerI18nActionsHooks = () => {
|
||||
const { actionProvider } = strapi.admin.services.permission;
|
||||
const { hooks } = strapi.admin.services.role;
|
||||
|
||||
actionProvider.hooks.appliesPropertyToSubject.register(shouldApplyLocalesPropertyToSubject);
|
||||
hooks.willResetSuperAdminPermission.register(addAllLocalesToPermissions);
|
||||
};
|
||||
|
||||
const updateActionsProperties = () => {
|
||||
@ -71,4 +115,5 @@ module.exports = {
|
||||
registerI18nActions,
|
||||
registerI18nActionsHooks,
|
||||
updateActionsProperties,
|
||||
syncSuperAdminPermissionsWithLocales,
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user