UNPKG

policyline

Version:

Attributes Based Access Control library for Node.JS

57 lines (48 loc) 1.33 kB
import Mutator from "./mutator"; function unwrapNamespace(data, namespace) { const path = namespace.split('.'); let result = data; for (let part of path) { try { result = result[part]; } catch (e) { result = null; break; } } return result; } function extract(data, operand, context) { let value = operand.value; if (operand.isDIObj) { value = unwrapNamespace(data, value) } operand.mutators.forEach((mutator) => { let tmpContext, fn; if (operand.isDIObj) { context[operand.value] = context[operand.value] || {}; tmpContext = context[operand.value]; } fn = Mutator.list[mutator]; if (fn && typeof fn !== 'function') { fn = fn[Mutator.prefix]; } value = fn ? fn(value, tmpContext) : value; }); return value; } function prepareCollection(inputData, exp, context, resourceName) { const leftOperand = extract(inputData, exp.left, context, null); const rightOperand = extract(inputData, exp.right, context, null); let resource = leftOperand === null ? exp.left.value : leftOperand; return { attribute: resource.replace(resourceName, ''), value: rightOperand === null ? exp.right.value : rightOperand, operator: exp.operator, mutators: exp.left.mutators }; } export { extract, prepareCollection }