37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
import _ from 'lodash/fp';
|
|
|
|
const PERMISSION_FIELDS = [
|
|
'action',
|
|
'subject',
|
|
'properties',
|
|
'conditions'
|
|
];
|
|
const sanitizePermissionFields = _.pick(PERMISSION_FIELDS);
|
|
/**
|
|
* Creates a permission with default values for optional properties
|
|
*/ const getDefaultPermission = ()=>({
|
|
conditions: [],
|
|
properties: {},
|
|
subject: null
|
|
});
|
|
/**
|
|
* Create a new permission based on given attributes
|
|
*
|
|
* @param {object} attributes
|
|
*/ const create = _.pipe(_.pick(PERMISSION_FIELDS), _.merge(getDefaultPermission()));
|
|
/**
|
|
* Add a condition to a permission
|
|
*/ const addCondition = _.curry((condition, permission)=>{
|
|
const { conditions } = permission;
|
|
const newConditions = Array.isArray(conditions) ? _.uniq(conditions.concat(condition)) : [
|
|
condition
|
|
];
|
|
return _.set('conditions', newConditions, permission);
|
|
});
|
|
/**
|
|
* Gets a property or a part of a property from a permission.
|
|
*/ const getProperty = _.curry((property, permission)=>_.get(`properties.${property}`, permission));
|
|
|
|
export { addCondition, create, getProperty, sanitizePermissionFields };
|
|
//# sourceMappingURL=index.mjs.map
|