Files
pole-book/server/node_modules/@strapi/permissions/dist/engine/hooks.js

82 lines
2.9 KiB
JavaScript

'use strict';
var _ = require('lodash/fp');
var utils = require('@strapi/utils');
var index = require('../domain/permission/index.js');
/**
* Create a hook map used by the permission Engine
*/ const createEngineHooks = ()=>({
'before-format::validate.permission': utils.hooks.createAsyncBailHook(),
'format.permission': utils.hooks.createAsyncSeriesWaterfallHook(),
'after-format::validate.permission': utils.hooks.createAsyncBailHook(),
'before-evaluate.permission': utils.hooks.createAsyncSeriesHook(),
'before-register.permission': utils.hooks.createAsyncSeriesHook()
});
/**
* Create a context from a domain {@link Permission} used by the validate hooks
*/ const createValidateContext = (permission)=>({
get permission () {
return _.cloneDeep(permission);
}
});
/**
* Create a context from a domain {@link Permission} used by the before valuate hook
*/ const createBeforeEvaluateContext = (permission)=>({
get permission () {
return _.cloneDeep(permission);
},
addCondition (condition) {
Object.assign(permission, index.addCondition(condition, permission));
return this;
}
});
/**
* Create a context from a casl Permission & some options
* @param caslPermission
*/ const createWillRegisterContext = ({ permission, options })=>({
...options,
get permission () {
return _.cloneDeep(permission);
},
condition: {
and (rawConditionObject) {
if (!permission.condition) {
permission.condition = {
$and: []
};
}
if (_.isArray(permission.condition.$and)) {
permission.condition.$and.push(rawConditionObject);
}
return this;
},
or (rawConditionObject) {
if (!permission.condition) {
permission.condition = {
$and: []
};
}
if (_.isArray(permission.condition.$and)) {
const orClause = permission.condition.$and.find(_.has('$or'));
if (orClause) {
orClause.$or.push(rawConditionObject);
} else {
permission.condition.$and.push({
$or: [
rawConditionObject
]
});
}
}
return this;
}
}
});
exports.createBeforeEvaluateContext = createBeforeEvaluateContext;
exports.createEngineHooks = createEngineHooks;
exports.createValidateContext = createValidateContext;
exports.createWillRegisterContext = createWillRegisterContext;
//# sourceMappingURL=hooks.js.map