2021-04-07 15:10:43 +02:00

47 lines
1.2 KiB
JavaScript

'use strict';
const { getService } = require('../../utils');
/**
* Locales property handler for the permission engine
* Add the has-locale-access condition if the locales property is defined
* @param {Permission} permission
* @param {function(string)} addCondition
*/
const willEvaluatePermissionHandler = ({ permission, addCondition }) => {
const { subject, properties } = permission;
const { locales } = properties || {};
const { isLocalizedContentType } = getService('content-types');
// If there is no subject defined, ignore the permission
if (!subject) {
return;
}
const ct = strapi.contentTypes[subject];
// If the subject exists but isn't localized, ignore the permission
if (!isLocalizedContentType(ct)) {
return;
}
// If the subject is localized but the locales property is null (access to all locales), ignore the permission
if (locales === null) {
return;
}
addCondition('plugins::i18n.has-locale-access');
};
const registerI18nPermissionsHandlers = () => {
const { engine } = strapi.admin.services.permission;
engine.hooks.willEvaluatePermission.register(willEvaluatePermissionHandler);
};
module.exports = {
willEvaluatePermissionHandler,
registerI18nPermissionsHandlers,
};