Skip to content

Commit

Permalink
load js policy if policy config is set
Browse files Browse the repository at this point in the history
  • Loading branch information
andypf committed Apr 29, 2022
1 parent 1efe664 commit f5938f2
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 24 deletions.
8 changes: 6 additions & 2 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,19 @@
"jest": true,
"node": true
},
"extends": ["eslint:recommended", "plugin:react/recommended"],
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:cypress/recommended"
],
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": ["react"],
"plugins": ["react", "cypress"],
"rules": {
"no-debugger": "off",
"no-console": "off",
Expand Down
43 changes: 21 additions & 22 deletions app/javascript/policy_engine.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
if (!window.policyConfig)
throw "Missing data. Please provide window.policyConfig"
if (!window.policyConfig.rules)
throw "Missing rules. Please provide window.policyConfig.rules"
if (!window.policyConfig.locals)
throw "Missing locals. Please provide window.policyConfig.locals"

// evaluate rules
const rules = {}
for (let name in window.policyConfig.rules) {
const rule = window.policyConfig.rules[name]
try {
rules[name] = eval(rule)
} catch (e) {
console.info("Policy Engine Error: ", e)
if (window.policyConfig?.rules && window.policyConfig?.locals) {
// evaluate rules
const rules = {}
for (let name in window.policyConfig.rules) {
const rule = window.policyConfig.rules[name]
try {
rules[name] = eval(rule)
} catch (e) {
console.info("Policy Engine Error: ", e)
}
}
}

window.policy = {
isAllowed: function (name, params = {}) {
const rule = rules[name]
if (!rule) throw "Policy Engine Error: rule #{name} not found."
return rule(rules, window.policyConfig.locals, params)
},
window.policy = {
isAllowed: function (name, params = {}) {
const rule = rules[name]
if (!rule) throw "Policy Engine Error: rule #{name} not found."
return rule(rules, window.policyConfig.locals, params)
},
}
} else {
console.info(
"Policy engine is not loaded because window.policyConfig does not contain required data"
)
}

0 comments on commit f5938f2

Please sign in to comment.