diff --git a/entitlement.js b/entitlement.js index e768d54..c3099bf 100644 --- a/entitlement.js +++ b/entitlement.js @@ -24,24 +24,40 @@ function Entitlement(id,options) var _entitlements = {}; -function Entitlements(ents) +function registerEntitlements(ents) { for(var i in ents) { _entitlements[i] = Entitlement(i, ents[i]); } } -function Role(id,descriptions) -{ - +function getEntitlement(id) { + return _entitlements[id]; } -function Roles(roles) +var RootRole = { + "toString" : function() { return this.id + ': ' + Object.keys(this.rights).join(','); }, + "hasEntitlement" : function(ent) { return this.rights[ent]; } +}; + +function Role(id,rights) { - + var rs = {}; + + for(var i in rights) { + var e = rights[i]; + rs[e] = _entitlements[e]; + if(!rs[e]) rs[e] = Entitlement(e); + } + + var defs = { + id: { value: id, enumerable: true }, + rights: { value: rs, enumerable: true }}; + + return Object.create(RootRole, defs); } exports.Entitlement = Entitlement; -exports.Entitlements = Entitlements; +exports.registerEntitlements = registerEntitlements; +exports.getEntitlement = getEntitlement; exports.Role = Role; -exports.Roles = Roles; diff --git a/tests/entitlement.js b/tests/entitlement.js index bd554a1..e2a6379 100644 --- a/tests/entitlement.js +++ b/tests/entitlement.js @@ -1,6 +1,7 @@ var vows = require('vows'), assert = require('assert'), - Entitlement = require('../entitlement').Entitlement; + Entitlement = require('../entitlement').Entitlement, + Role = require('../entitlement').Role; vows.describe('entitlement').addBatch({ 'declare single with description': { @@ -20,6 +21,15 @@ vows.describe('entitlement').addBatch({ 'toString': function(entitlement) { assert.equal(entitlement.toString(), 'ent1'); } + }, + 'declare role': { + topic: Role('role1',['ent1']), + 'id present': function(entitlement) { + assert.equal(entitlement.id, 'role1'); + }, + 'toString': function(entitlement) { + assert.equal(entitlement.toString(), 'role1: ent1'); + } } }).export(module);