42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
'use strict';
|
|
|
|
var _ = require('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));
|
|
|
|
exports.addCondition = addCondition;
|
|
exports.create = create;
|
|
exports.getProperty = getProperty;
|
|
exports.sanitizePermissionFields = sanitizePermissionFields;
|
|
//# sourceMappingURL=index.js.map
|