mirror of
https://github.com/strapi/strapi.git
synced 2025-08-02 22:07:11 +00:00
47 lines
1.2 KiB
JavaScript
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 { isLocalized } = 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 (!isLocalized(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,
|
||
|
};
|