2020-06-08 11:01:20 +02:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const _ = require('lodash');
|
|
|
|
|
|
|
|
const actionFields = [
|
|
|
|
'section',
|
|
|
|
'displayName',
|
|
|
|
'category',
|
|
|
|
'subCategory',
|
|
|
|
'pluginName',
|
|
|
|
'subjects',
|
|
|
|
'conditions',
|
|
|
|
];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return a prefixed id that depends on the pluginName
|
|
|
|
* @param {Object} params
|
|
|
|
* @param {Object} params.pluginName - pluginName on which the action is related
|
|
|
|
* @param {Object} params.uid - uid defined by the developer
|
|
|
|
*/
|
|
|
|
const getActionId = ({ pluginName, uid }) => {
|
|
|
|
let id = '';
|
|
|
|
if (pluginName === 'admin') {
|
|
|
|
id = `admin::${uid}`;
|
2020-06-09 17:45:53 +02:00
|
|
|
} else if (pluginName) {
|
2020-06-08 11:01:20 +02:00
|
|
|
id = `plugins::${pluginName}.${uid}`;
|
2020-06-09 17:45:53 +02:00
|
|
|
} else {
|
|
|
|
id = `application::${uid}`;
|
2020-06-08 11:01:20 +02:00
|
|
|
}
|
|
|
|
return id;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a permission action
|
|
|
|
* @param {Object} attributes - action attributes
|
|
|
|
*/
|
|
|
|
function createAction(attributes) {
|
|
|
|
const action = _.cloneDeep(_.pick(attributes, actionFields));
|
|
|
|
action.actionId = getActionId(attributes);
|
|
|
|
|
|
|
|
if (['settings', 'plugins'].includes(attributes.section)) {
|
|
|
|
action.subCategory = attributes.subCategory || 'general';
|
|
|
|
}
|
|
|
|
|
|
|
|
return action;
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
getActionId,
|
|
|
|
createAction,
|
|
|
|
};
|