node-acl
Version:
A tiny ACL toolkit
37 lines (28 loc) • 1.05 kB
text/coffeescript
logr = require('node-logr').getLogger(__filename)
### [ { role:"..", model:"..", crudOps:[..] }, .. ] rulesList ###
exports.acl = (rulesList)->
new ACL(rulesList)
exports.CRUD = {
"create"
"read"
"update"
"delete"
"patch"
}
class ACL
### { role : { model: {[crudOps,..]} } } ###
rules : null
constructor : (rulesList)->
= {}
for rule in rulesList
if not ( rule.role of ) then [ rule.role ] = {}
if not ( rule.model of [rule.role] ) then [rule.role][rule.model] = []
[rule.role][rule.model].push(crudOp) for crudOp in rule.crudOps
### { role:"..", model:"..", crudOps:[..] } options ###
### String - null if validation passed OK ###
validate : (options)=>
allowedOps = [ options.role ]?[ options.model ]
if not allowedOps || ( options.crudOps.filter( (ao)-> allowedOps.indexOf(ao) == -1 ).length > 0 )
logr.notice "failed validation:#{JSON.stringify(options)}"
return "failed validation:#{JSON.stringify(options)}"
else return null