50 lines
1.7 KiB
JavaScript
50 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
var qs = require('qs');
|
|
var reactRouterDom = require('react-router-dom');
|
|
|
|
function _interopNamespaceDefault(e) {
|
|
var n = Object.create(null);
|
|
if (e) {
|
|
Object.keys(e).forEach(function (k) {
|
|
if (k !== 'default') {
|
|
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
Object.defineProperty(n, k, d.get ? d : {
|
|
enumerable: true,
|
|
get: function () { return e[k]; }
|
|
});
|
|
}
|
|
});
|
|
}
|
|
n.default = e;
|
|
return Object.freeze(n);
|
|
}
|
|
|
|
var qs__namespace = /*#__PURE__*/_interopNamespaceDefault(qs);
|
|
|
|
const localeMiddleware = (ctx)=>(next)=>(permissions)=>{
|
|
const match = reactRouterDom.matchPath('/content-manager/:collectionType/:model?/:id', ctx.pathname);
|
|
if (!match) {
|
|
return next(permissions);
|
|
}
|
|
const search = qs__namespace.parse(ctx.search);
|
|
if (typeof search !== 'object') {
|
|
return next(permissions);
|
|
}
|
|
if (!('plugins' in search && typeof search.plugins === 'object')) {
|
|
return next(permissions);
|
|
}
|
|
if (!('i18n' in search.plugins && typeof search.plugins.i18n === 'object' && !Array.isArray(search.plugins.i18n))) {
|
|
return next(permissions);
|
|
}
|
|
const { locale } = search.plugins.i18n;
|
|
if (typeof locale !== 'string') {
|
|
return next(permissions);
|
|
}
|
|
const revisedPermissions = permissions.filter((permission)=>!permission.properties?.locales || permission.properties.locales.includes(locale));
|
|
return next(revisedPermissions);
|
|
};
|
|
|
|
exports.localeMiddleware = localeMiddleware;
|
|
//# sourceMappingURL=rbac-middleware.js.map
|