82 lines
2.9 KiB
JavaScript
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
|