4.1.0 • Published 2 years ago
@jcoreio/roles-calc v4.1.0
roles-calc
Resolves whether a user can perform an action based on hierarchical roles
Installation
yarn add @jcoreio/roles-calcor
npm install --save @jcoreio/roles-calcUsage
A collection of roles can be specified in one of four ways:
- An
Arrayof role names - A
Setof role names - An
Objectwhere the key is the role name and the value istrueiff the user has the role - A single role name (
string)
@jcoreio/roles-calc exports rolesToArray, rolesToSet, rolesToObject,
and rolesToIterable for converting between these forms.
rolesToArray({ employee: true, manager: true, owner: false }) // ['employee', 'manager']
rolesToObject(new Set(['employee', 'manager'])) // {employee: true, manager: true}Calculate basic roles
const RolesCalc = require('@jcoreio/roles-calc')
const rc = new RolesCalc()
rc.isAuthorized({ required: 'employee', actual: ['employee', 'manager'] }) // true
rc.isAuthorized({ required: 'owner', actual: ['employee', 'manager'] }) // false
rc.isAuthorized({ required: 'owner', actual: 'owner' }) // true, 'actual' can be a string or arrayCalculate roles with simple inheritance
const rc = new RolesCalc()
rc.role('owner').extends(['manager', 'employee'])
rc.isAuthorized({ required: 'employee', actual: 'owner' }) // true, owner > employee
rc.isAuthorized({ required: 'manager', actual: 'owner' }) // true, owner > manager
rc.isAuthorized({ required: 'owner', actual: 'manager' }) // false, manager < ownerCalculate roles with multi level inheritance
const rc = new RolesCalc()
rc.role('manager').extends('employee')
rc.role('owner').extends('manager')
rc.isAuthorized({ required: 'employee', actual: 'owner' }) // true, owner > manager > employee
rc.isAuthorized({ required: 'employee', actual: 'manager' }) // true, manager > employee
rc.isAuthorized({ required: 'owner', actual: 'manager' }) // false, manager < ownerAlways allow 'admin' or similar permissions
const rc = new RolesCalc({ alwaysAllow: 'admin' })
rc.isAuthorized({ required: 'employee', actual: 'admin' }) // true, admin is always authorized
rc.isAuthorized({ required: 'employee', actual: 'owner' }) // false, owner wasn't included in alwaysAllowconst rc = new RolesCalc({ alwaysAllow: ['admin', 'owner'] })
rc.isAuthorized({ required: 'employee', actual: 'admin' }) // true, admin is always authorized
rc.isAuthorized({ required: 'employee', actual: 'owner' }) // true, owner is always authorizedresource:action roles
const rc = new RolesCalc({ resourceActions: true })
rc.isAuthorized({ required: 'site:read', actual: 'site:write' }) // false writeExtendsRead option is not enabled
rc.isAuthorized({ required: 'site:explode', actual: 'site' }) // true, a general 'resource' role extends all 'resource:action' roleswriteExtendsRead option for resources
const rc = new RolesCalc({ resourceActions: true, writeExtendsRead: true })
rc.isAuthorized({ required: 'site:read', actual: 'site:write' }) // true, resource:write > resource:read
rc.isAuthorized({ required: 'site:explode', actual: 'site:write' }) // false, resource:write does not extend unrelated actions by default
rc.isAuthorized({ required: 'site:explode', actual: 'site' }) // true, a general 'resource' role extends all 'resource:action' rolesGet set of all parent roles
const rc = new RolesCalc()
rc.role('manager').extends('employee')
rc.role('owner').extends('manager')
rc.getParentRolesSet('employee') // 'owner', 'manager'
rc.getRoleAndParentRolesSet('employee') // 'owner', 'manager', 'employee'Prune redundant roles
const rc = new RolesCalc()
rc.role('manager').extends('employee')
rc.role('owner').extends('manager')
rc.pruneRedundantRolesSet(['manager', 'employee']) // new Set(['manager'])
rc.pruneRedundantRoles(['owner', 'manager', 'employee']) // ['owner']4.1.0
2 years ago
4.0.1
5 years ago
4.0.0
5 years ago
3.3.1
6 years ago
3.3.0
6 years ago
3.2.0
6 years ago
3.1.0
6 years ago
3.0.0
6 years ago
2.0.2
7 years ago
2.0.1
7 years ago
2.0.0
7 years ago
1.4.4
7 years ago
1.4.3
7 years ago
1.4.2
7 years ago
1.4.1
7 years ago
1.4.0
7 years ago
1.3.0
7 years ago
1.2.1
7 years ago
1.2.0
7 years ago
1.1.2
7 years ago
1.1.1
7 years ago
1.1.0
8 years ago
1.0.0
8 years ago