UNPKG

role-acl

Version:

Role, Attribute and Condition based Access Control for Node.js

123 lines (122 loc) 5.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var jsonpath_plus_1 = require("jsonpath-plus"); var lodash_flattendeep_1 = __importDefault(require("lodash.flattendeep")); var TrueCondition_1 = require("./TrueCondition"); var EqualsCondition_1 = require("./EqualsCondition"); var NotEqualsCondition_1 = require("./NotEqualsCondition"); var NotCondition_1 = require("./NotCondition"); var ListContainsCondition_1 = require("./ListContainsCondition"); var OrCondition_1 = require("./OrCondition"); var AndCondition_1 = require("./AndCondition"); var StartsWithCondition_1 = require("./StartsWithCondition"); var core_1 = require("../core"); var ConditionUtil = /** @class */ (function () { function ConditionUtil() { } ConditionUtil.registerCustomConditionFunction = function (functionName, fn) { if (!functionName) { throw new core_1.AccessControlError("Condition function name:" + functionName + " is not valid"); } if (!functionName.startsWith("custom:")) { functionName = "custom:" + functionName; } if (ConditionUtil._customConditionFunctions[functionName]) { console.warn("Replacing existing function: ", functionName, "with:", fn); } ConditionUtil._customConditionFunctions[functionName] = fn; }; ConditionUtil.resetCustomConditionFunctions = function () { ConditionUtil._customConditionFunctions = {}; }; ConditionUtil.getCustomConditionFunctions = function () { return ConditionUtil._customConditionFunctions; }; ConditionUtil.setCustomConditionFunctions = function (customConditionFunctions) { if (customConditionFunctions === void 0) { customConditionFunctions = {}; } for (var conditionFnName in customConditionFunctions) { ConditionUtil.registerCustomConditionFunction(conditionFnName, customConditionFunctions[conditionFnName]); } }; ConditionUtil.validateCondition = function (condition) { if (!condition) { return; } if (typeof condition === "function") { return; } if (typeof condition === "string") { if (!ConditionUtil._customConditionFunctions[condition]) { throw new core_1.AccessControlError("Condition function: " + condition + " not found"); } return; } if (typeof condition === "object") { if (!condition.Fn || !(ConditionUtil[condition.Fn] || ConditionUtil._customConditionFunctions[condition.Fn])) { throw new core_1.AccessControlError("Condition function:" + condition.Fn + " is not valid"); } return; } }; ConditionUtil.evaluate = function (condition, context) { if (!condition) { return true; } if (typeof condition === "function") { return condition(context); } if (typeof condition === "string") { if (!ConditionUtil._customConditionFunctions[condition]) { throw new core_1.AccessControlError("Condition function: " + condition + " not found"); } return ConditionUtil._customConditionFunctions[condition](context); } if (typeof condition === "object") { if (!condition.Fn) { throw new core_1.AccessControlError("Condition function:" + condition.Fn + " is not valid"); } if (ConditionUtil[condition.Fn]) { return ConditionUtil[condition.Fn].evaluate(condition.args, context); } else if (ConditionUtil._customConditionFunctions[condition.Fn]) { return ConditionUtil._customConditionFunctions[condition.Fn](context, condition.args); } else { throw new core_1.AccessControlError("Condition function:" + condition.Fn + " is not found"); } } return false; }; ConditionUtil.getValueByPath = function (context, valuePathOrValue) { // Check if the value is JSONPath if (valuePathOrValue && typeof valuePathOrValue === "string" && valuePathOrValue.startsWith("$.")) { var jsonPathVal = jsonpath_plus_1.JSONPath({ path: valuePathOrValue, json: context, wrap: false, }); if (Array.isArray(jsonPathVal)) { jsonPathVal = lodash_flattendeep_1.default(jsonPathVal); } return jsonPathVal; } return valuePathOrValue; }; ConditionUtil.AND = new AndCondition_1.AndCondition(); ConditionUtil.TRUE = new TrueCondition_1.TrueCondition(); ConditionUtil.EQUALS = new EqualsCondition_1.EqualsCondition(); ConditionUtil.LIST_CONTAINS = new ListContainsCondition_1.ListContainsCondition(); ConditionUtil.NOT_EQUALS = new NotEqualsCondition_1.NotEqualsCondition(); ConditionUtil.NOT = new NotCondition_1.NotCondition(); ConditionUtil.OR = new OrCondition_1.OrCondition(); ConditionUtil.STARTS_WITH = new StartsWithCondition_1.StartsWithCondition(); ConditionUtil._customConditionFunctions = {}; return ConditionUtil; }()); exports.ConditionUtil = ConditionUtil;