integreat
Version:
Node.js integration layer
30 lines • 1.3 kB
JavaScript
import { ensureArray } from '../utils/array.js';
const allowedOrNone = (method) => method === undefined || ['all', 'auth'].includes(method) ? method : 'none';
const massageAccessObject = ({ actions, allow, role, ident, ...accessObject }) => ({
...accessObject,
...(allow ? { allow: allowedOrNone(allow) } : {}),
...(ident ? { ident: ensureArray(ident) } : {}),
...(role ? { role: ensureArray(role) } : {}),
});
function getActionPrefix(action) {
const index = action.indexOf('_');
return index >= 0 ? action.slice(0, index) : action;
}
function ensureAccessObject(access) {
if (typeof access === 'string') {
return massageAccessObject({ allow: access });
}
if (typeof access === 'object' && access !== null) {
return Object.keys(access).length > 0 ? massageAccessObject(access) : {};
}
return access === undefined ? {} : { allow: 'none' };
}
const getActionAccess = (access, actionType) => typeof access?.actions === 'object' &&
access?.actions != null &&
typeof actionType === 'string'
? access.actions[getActionPrefix(actionType)] || access
: access;
export default function accessForAction(access, actionType) {
return ensureAccessObject(getActionAccess(access, actionType));
}
//# sourceMappingURL=accessForAction.js.map