rbac 4.0.2 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/HISTORY.md +21 -3
  2. package/LICENSE +21 -0
  3. package/README.md +43 -104
  4. package/dist/Base.js +31 -65
  5. package/dist/Base.js.map +1 -0
  6. package/dist/Memory.js +139 -0
  7. package/dist/Memory.js.map +1 -0
  8. package/dist/Permission.js +99 -137
  9. package/dist/Permission.js.map +1 -0
  10. package/dist/RBAC.js +420 -798
  11. package/dist/RBAC.js.map +1 -0
  12. package/dist/Role.js +67 -142
  13. package/dist/Role.js.map +1 -0
  14. package/dist/Storage.js +160 -0
  15. package/dist/Storage.js.map +1 -0
  16. package/dist/index.js +45 -35
  17. package/dist/index.js.map +1 -0
  18. package/package.json +22 -45
  19. package/.babelrc +0 -9
  20. package/.eslintignore +0 -7
  21. package/.eslintrc +0 -5
  22. package/.npmignore +0 -4
  23. package/.travis.yml +0 -14
  24. package/__tests__/role.spec.js +0 -410
  25. package/controllers/express.js +0 -72
  26. package/coverage/clover.xml +0 -526
  27. package/coverage/coverage-final.json +0 -9
  28. package/coverage/lcov-report/base.css +0 -212
  29. package/coverage/lcov-report/index.html +0 -106
  30. package/coverage/lcov-report/prettify.css +0 -1
  31. package/coverage/lcov-report/prettify.js +0 -1
  32. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  33. package/coverage/lcov-report/sorter.js +0 -158
  34. package/coverage/lcov-report/tests/index.html +0 -93
  35. package/coverage/lcov-report/tests/role.spec.js.html +0 -1316
  36. package/coverage/lcov.info +0 -1115
  37. package/dist/storages/Memory.js +0 -219
  38. package/dist/storages/Mongoose.js +0 -303
  39. package/dist/storages/index.js +0 -300
  40. package/example/simple.js +0 -25
  41. package/gulpfile.js +0 -16
  42. package/jsdocConfig.js +0 -20
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RBAC.js","names":["_Base","_interopRequireDefault","require","_Role","_Permission","_Storage","_Memory","e","__esModule","default","isPlainObject","value","proto","Object","getPrototypeOf","prototype","DEFAULT_OPTIONS","permissions","roles","grant","delimiter","RBAC","getPermissionNames","Error","map","permission","Permission","createName","constructor","options","storage","MemoryStorage","useRBAC","init","grants","create","get","name","add","item","rbac","remove","removeByName","role","child","Role","revoke","revokeByName","roleName","childName","Promise","all","grantByName","createRole","createPermission","action","resource","exists","existsRole","existsPermission","getRole","getRoles","getPermission","getPermissionByName","data","decodeName","getPermissions","createPermissions","resources","keys","actions","createRoles","roleNames","permissionNames","grantsData","traverseGrants","cb","next","used","actualRole","shift","getGrants","i","length","push","result","undefined","can","canAny","includes","canAll","founded","foundedCount","hasRole","roleChildName","has","getScope","scope","exports"],"sources":["../src/RBAC.js"],"sourcesContent":["// @flow\nimport Base from './Base';\n\nfunction isPlainObject(value) {\n if (typeof value !== 'object' || value === null) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\nimport Role from './Role';\nimport Permission from './Permission';\nimport Storage from './Storage';\nimport MemoryStorage from './Memory';\n\nconst DEFAULT_OPTIONS = {\n permissions: {},\n roles: [],\n grant: {},\n delimiter: '_',\n};\n\nexport default class RBAC {\n /**\n * Convert Array of permissions to permission name\n * @function getPermissionNames\n * @memberof RBAC\n * @param {Array} permissions List of array items of permission names. It contan action and resource\n * @param {string} delimiter\n * @return {string[]}\n * @static\n */\n static getPermissionNames(permissions, delimiter: string): string[] {\n if (!delimiter) {\n throw new Error('Delimiter is not defined');\n }\n\n return permissions.map(\n permission => Permission.createName(permission[0], permission[1], delimiter),\n );\n }\n\n /**\n * RBAC constructor\n * @constructor RBAC\n * @param {Object} options Options for RBAC\n * @param {Storage} [options.storage] Storage of grants\n * @param {Array} [options.roles] List of role names (String)\n * @param {Object} [options.permissions] List of permissions\n * @param {Object} [options.grants] List of grants\n */\n constructor(options: Object) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n\n this.storage = this.options.storage || new MemoryStorage();\n this.storage.useRBAC(this);\n }\n\n async init() {\n const { roles, permissions, grants } = this.options;\n\n return this.create(roles, permissions, grants);\n }\n\n /**\n * Get instance of Role or Permission by his name\n * @method RBAC#get\n * @param {String} name Name of item\n */\n async get(name: string): ?Base {\n return this.storage.get(name);\n }\n\n /**\n * Register role or permission to actual RBAC instance\n * @method RBAC#add\n * @param {Base} item Instance of Base\n */\n async add(item: Base): boolean {\n if (!item) {\n throw new Error('Item is undefined');\n }\n\n if (item.rbac !== this) {\n throw new Error('Item is associated to another RBAC instance');\n }\n\n return this.storage.add(item);\n }\n\n /**\n * Remove role or permission from RBAC\n * @method RBAC#remove\n * @param {Base} item Instance of role or permission\n */\n async remove(item: Base): boolean {\n if (!item) {\n throw new Error('Item is undefined');\n }\n\n if (item.rbac !== this) {\n throw new Error('Item is associated to another RBAC instance');\n }\n\n return this.storage.remove(item);\n }\n\n /**\n * Remove role or permission from RBAC\n * @method RBAC#removeByName\n * @param {String} name Name of role or permission\n */\n async removeByName(name: string): boolean {\n const item = await this.get(name);\n if (!item) {\n return true;\n }\n\n return item.remove();\n }\n\n /**\n * Grant permission or role to the role\n * @method RBAC#grant\n * @param {Role} role Instance of the role\n * @param {Base} child Instance of the role or permission\n */\n async grant(role: Role, child: Base): boolean {\n if (!role || !child) {\n throw new Error('One of item is undefined');\n }\n\n if (role.rbac !== this || child.rbac !== this) {\n throw new Error('Item is associated to another RBAC instance');\n }\n\n if (!(role instanceof Role)) {\n throw new Error('Role is not instance of Role');\n }\n\n return this.storage.grant(role, child);\n }\n\n /**\n * Revoke permission or role from the role\n * @method RBAC#revoke\n * @param {Role} role Instance of the role\n * @param {Base} child Instance of the role or permission\n */\n async revoke(role: Role, child: Base): boolean {\n if (!role || !child) {\n throw new Error('One of item is undefined');\n }\n\n if (role.rbac !== this || child.rbac !== this) {\n throw new Error('Item is associated to another RBAC instance');\n }\n\n return this.storage.revoke(role, child);\n }\n\n /**\n * Revoke permission or role from the role by names\n * @method RBAC#revokeByName\n * @param {String} roleName Instance of the role\n * @param {String} childName Instance of the role or permission\n */\n async revokeByName(roleName: string, childName: string): void {\n const [role, child] = await Promise.all([\n this.get(roleName),\n this.get(childName),\n ]);\n\n return this.revoke(role, child);\n }\n\n /**\n * Grant permission or role from the role by names\n * @method RBAC#grantByName\n * @param {String} roleName Instance of the role\n * @param {String} childName Instance of the role or permission\n */\n async grantByName(roleName: string, childName: string): void {\n const [role, child] = await Promise.all([\n this.get(roleName),\n this.get(childName),\n ]);\n\n return this.grant(role, child);\n }\n\n /**\n * Create a new role assigned to actual instance of RBAC\n * @method RBAC#createRole\n * @param {String} roleName Name of new Role\n * @param {Boolean} [add] True if you need to add it to the storage\n * @return {Role} Instance of the Role\n */\n async createRole(roleName: string, add?: boolean): Role {\n const role = new Role(this, roleName);\n if (add) {\n await role.add();\n }\n\n return role;\n }\n\n /**\n * Create a new permission assigned to actual instance of RBAC\n * @method RBAC#createPermission\n * @param {String} action Name of action\n * @param {String} resource Name of resource\n * @param {Boolean} [add] True if you need to add it to the storage\n * @return {Permission} Instance of the Permission\n */\n async createPermission(action:string, resource: string, add?: boolean): Permission {\n const permission = new Permission(this, action, resource);\n if (add) {\n await permission.add();\n }\n\n return permission;\n }\n\n /**\n * Callback returns true if role or permission exists\n * @method RBAC#exists\n * @param {String} name Name of item\n */\n async exists(name: string): boolean {\n return this.storage.exists(name);\n }\n\n /**\n * Callback returns true if role exists\n * @method RBAC#existsRole\n * @param {String} name Name of item\n */\n async existsRole(name: string): boolean {\n return this.storage.existsRole(name);\n }\n\n /**\n * Callback returns true if permission exists\n * @method RBAC#existsPermission\n * @param {String} action Name of action\n * @param {String} resource Name of resource\n */\n async existsPermission(action: string, resource: string): boolean {\n return this.storage.existsPermission(action, resource);\n }\n\n /**\n * Return instance of Role by his name\n * @method RBAC#getRole\n * @param {String} name Name of role\n */\n async getRole(name: string): ?Role {\n return this.storage.getRole(name);\n }\n\n /**\n * Return all instances of Role\n * @method RBAC#getRoles\n */\n async getRoles(): Role[] {\n return this.storage.getRoles();\n }\n\n /**\n * Return instance of Permission by his action and resource\n * @method RBAC#getPermission\n * @param {String} action Name of action\n * @param {String} resource Name of resource\n */\n async getPermission(action: string, resource: string): ?Permission {\n return this.storage.getPermission(action, resource);\n }\n\n /**\n * Return instance of Permission by his name\n * @method RBAC#getPermission\n * @param {String} name Name of permission\n */\n async getPermissionByName(name: string): ?Permission {\n const data = Permission.decodeName(name, this.options.delimiter);\n return this.storage.getPermission(data.action, data.resource);\n }\n\n /**\n * Return all instances of Permission\n * @method RBAC#getPermissions\n */\n async getPermissions(): Permission[] {\n return this.storage.getPermissions();\n }\n\n /**\n * Create multiple permissions in one step\n * @method RBAC#createPermissions\n * @param {Object} permissions Object of permissions\n * @param {Boolean} [add=true] True if you need to add it to the storage\n */\n async createPermissions(resources: Object, add?: boolean = true): Permission[] {\n if (!isPlainObject(resources)) {\n throw new Error('Resources is not a plain object');\n }\n\n const permissions = {};\n\n await Promise.all(Object.keys(resources).map(async (resource) => {\n const actions = resources[resource];\n\n await Promise.all(actions.map(async (action) => {\n const permission = await this.createPermission(action, resource, add);\n permissions[permission.name] = permission;\n }));\n }));\n\n return permissions;\n }\n\n /**\n * Create multiple roles in one step assigned to actual instance of RBAC\n * @method RBAC#createRoles\n * @param {Array} roleNames Array of role names\n * @param {Boolean} [add=true] True if you need to add it to the storage\n */\n async createRoles(roleNames: string[], add?: boolean = true): Role[] {\n const roles = {};\n await Promise.all(roleNames.map(async (roleName) => {\n const role = await this.createRole(roleName, add);\n\n roles[role.name] = role;\n }));\n\n return roles;\n }\n\n /**\n * Grant multiple items in one function\n * @method RBAC#grants\n * @param {Object} List of roles\n */\n async grants(roles: Object) {\n if (!isPlainObject(roles)) {\n throw new Error('Grants is not a plain object');\n }\n\n await Promise.all(Object.keys(roles).map(async (roleName) => {\n const grants = roles[roleName];\n\n await Promise.all(grants.map(async (grant) => {\n await this.grantByName(roleName, grant);\n }));\n }));\n }\n\n /**\n * Create multiple permissions and roles in one step\n * @method RBAC#create\n * @param {Object[]} roleNames List of role names\n * @param {Object[]} permissionNames List of permission names\n * @param {Object} [grants] List of grants\n */\n async create(roleNames, permissionNames, grantsData): Object {\n const [permissions, roles] = await Promise.all([\n this.createPermissions(permissionNames),\n this.createRoles(roleNames),\n ]);\n\n\n if (grantsData) {\n await this.grants(grantsData);\n }\n\n return {\n permissions,\n roles,\n };\n }\n\n /**\n * Traverse hierarchy of roles.\n * Callback function returns as second parameter item from hierarchy or null if we are on the end of hierarchy.\n * @method RBAC#_traverseGrants\n * @param {string} roleName Name of role\n * @param {Function} cb Callback function\n * @private\n */\n async traverseGrants(roleName: string, cb: Function, next: String[] = [roleName], used: Object = {}): any {\n const actualRole = next.shift();\n used[actualRole] = true;\n\n const grants = await this.storage.getGrants(actualRole);\n for (let i = 0; i < grants.length; i += 1) {\n const item = grants[i];\n const { name } = item;\n\n if (item instanceof Role && !used[name]) {\n used[name] = true;\n next.push(name);\n }\n\n const result = await cb(item);\n if (result !== undefined) {\n return result;\n }\n }\n\n if (next.length) {\n return this.traverseGrants(null, cb, next, used);\n }\n }\n\n /**\n * Return true if role has allowed permission\n * @method RBAC#can\n * @param {string} roleName Name of role\n * @param {string} action Name of action\n * @param {string} resource Name of resource\n * @return {boolean}\n */\n async can(roleName: string, action: string, resource: string): boolean {\n const can = await this.traverseGrants(roleName, (item) => {\n if (item instanceof Permission && item.can(action, resource)) {\n return true;\n }\n });\n\n return can || false;\n }\n\n\n /**\n * Check if the role has any of the given permissions.\n * @method RBAC#canAny\n * @param {string} roleName Name of role\n * @param {Object[]} permissions Array (String action, String resource)\n * @return {boolean}\n */\n async canAny(roleName: string, permissions: Object[]): boolean {\n // prepare the names of permissions\n const permissionNames = RBAC.getPermissionNames(permissions, this.options.delimiter);\n\n // traverse hierarchy\n const can = await this.traverseGrants(roleName, (item) => {\n if (item instanceof Permission && permissionNames.includes(item.name)) {\n return true;\n }\n\n return undefined;\n });\n\n return can || false;\n }\n\n /**\n * Check if the model has all of the given permissions.\n * @method RBAC#canAll\n * @param {string} roleName Name of role\n * @param {Object[]} permissions Array (String action, String resource)\n * @return {boolean} Current instance\n */\n async canAll(roleName: string, permissions: Object[]) {\n // prepare the names of permissions\n const permissionNames = RBAC.getPermissionNames(permissions, this.options.delimiter);\n const founded = {};\n let foundedCount = 0;\n\n // traverse hierarchy\n await this.traverseGrants(roleName, (item) => {\n if (item instanceof Permission && permissionNames.includes(item.name) && !founded[item.name]) {\n founded[item.name] = true;\n foundedCount += 1;\n\n if (foundedCount === permissionNames.length) {\n return true;\n }\n }\n\n return undefined;\n });\n\n return foundedCount === permissionNames.length;\n }\n\n /**\n * Return true if role has allowed permission\n * @method RBAC#hasRole\n * @param {String} roleName Name of role\n * @param {String} roleChildName Name of child role\n * @return {boolean}\n */\n async hasRole(roleName: string, roleChildName: string): boolean {\n if (roleName === roleChildName) {\n return true;\n }\n\n const has = await this.traverseGrants(roleName, (item) => {\n if (item instanceof Role && item.name === roleChildName) {\n return true;\n }\n\n return undefined;\n });\n\n return has || false;\n }\n\n /**\n * Return array of all permission assigned to role of RBAC\n * @method RBAC#getScope\n * @param {string} roleName Name of role\n * @return {string[]}\n */\n async getScope(roleName: string): string[] {\n const scope = [];\n\n // traverse hierarchy\n await this.traverseGrants(roleName, (item) => {\n if (item instanceof Permission && !scope.includes(item.name)) {\n scope.push(item.name);\n }\n });\n\n return scope;\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/dist/Role.js CHANGED
@@ -1,164 +1,89 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
-
7
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8
-
9
- var _Base2 = require('./Base');
10
-
11
- var _Base3 = _interopRequireDefault(_Base2);
12
-
13
- var _Permission = require('./Permission');
14
-
15
- var _Permission2 = _interopRequireDefault(_Permission);
16
-
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
-
19
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
20
-
21
- function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
22
-
23
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
24
-
25
- var Role = function (_Base) {
26
- _inherits(Role, _Base);
27
-
6
+ exports.default = void 0;
7
+ var _Base = _interopRequireDefault(require("./Base"));
8
+ var _Permission = _interopRequireDefault(require("./Permission"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ class Role extends _Base.default {
28
11
  /**
29
12
  * Role constructor
30
13
  * @constructor Role
31
14
  * @extends {Base}
32
- * @param {RBAC} rbac Instance of the RBAC
33
- * @param {String} name Name of the role
34
- * @param {Boolean} [add=true] True if you need to save it to storage
35
- * @param {Function} cb Callback function after add
15
+ * @param {RBAC} rbac Instance of the RBAC
16
+ * @param {String} name Name of the role
36
17
  */
37
- function Role(rbac, name, add, cb) {
38
- _classCallCheck(this, Role);
39
-
40
- if (typeof add === 'function') {
41
- cb = add;
42
- add = true;
43
- }
44
-
45
- if (!_Permission2.default.isValidName(name)) {
46
- var _ret;
47
-
48
- return _ret = cb(new Error('Role has no valid name')), _possibleConstructorReturn(_this, _ret);
18
+ constructor(rbac, name) {
19
+ if (!_Permission.default.isValidName(name, rbac.options.delimiter)) {
20
+ throw new Error('Role has no valid name');
49
21
  }
50
-
51
- return _possibleConstructorReturn(this, (Role.__proto__ || Object.getPrototypeOf(Role)).call(this, rbac, name, add, cb));
22
+ super(rbac, name);
52
23
  }
53
24
 
54
25
  /**
55
26
  * Add role or permission to current role
56
27
  * @method Role#grant
57
- * @param {Role|Permission} item Instance of role or permission
58
- * @param {Function} cb Callback function
59
- * @return {Role} Return current instance of role
28
+ * @param {Role|Permission} item Instance of role or permission
60
29
  */
30
+ async grant(item) {
31
+ return this.rbac.grant(this, item);
32
+ }
61
33
 
34
+ /**
35
+ * Remove role or permission from current role
36
+ * @method Role#revoke
37
+ * @param {Role|Permission} item Instance of role or permission
38
+ */
39
+ async revoke(item) {
40
+ return this.rbac.revoke(this, item);
41
+ }
62
42
 
63
- _createClass(Role, [{
64
- key: 'grant',
65
- value: function grant(item, cb) {
66
- this.rbac.grant(this, item, cb);
67
- return this;
68
- }
69
-
70
- /**
71
- * Remove role or permission from current role
72
- * @method Role#revoke
73
- * @param {Role|Permission} item Instance of role or permission
74
- * @param {Function} cb Callback function
75
- * @return {Role} Return current instance of role
76
- */
77
-
78
- }, {
79
- key: 'revoke',
80
- value: function revoke(item, cb) {
81
- this.rbac.revoke(this, item, cb);
82
- return this;
83
- }
84
-
85
- /**
86
- * Return true if contains permission
87
- * @method Role#can
88
- * @param {String} action Name of action
89
- * @param {String} resource Name of resource
90
- * @param {Function} cb Callback function
91
- * @return {Role} Return current instance of role
92
- */
93
-
94
- }, {
95
- key: 'can',
96
- value: function can(action, resource, cb) {
97
- this.rbac.can(this.name, action, resource, cb);
98
- return this;
99
- }
100
-
101
- /**
102
- * Check if the role has any of the given permissions
103
- * @method Role#canAny
104
- * @param {Array} permissions List of permissions. Each has structure (String action, String resource)
105
- * @param {Function} cb Callback function
106
- * @return {Role} Return current instance of role
107
- */
108
-
109
- }, {
110
- key: 'canAny',
111
- value: function canAny(permissions, cb) {
112
- this.rbac.canAny(this.name, permissions, cb);
113
- return this;
114
- }
115
-
116
- /**
117
- * Check if the model has all of the given permissions
118
- * @method Role#canAll
119
- * @param {Array} permissions List of permissions. Each has structure (String action, String resource)
120
- * @param {Function} cb Callback function
121
- * @return {Role} Return current instance of role
122
- */
123
-
124
- }, {
125
- key: 'canAll',
126
- value: function canAll(permissions, cb) {
127
- this.rbac.canAll(this.name, permissions, cb);
128
- return this;
129
- }
130
-
131
- /**
132
- * Return true if the current role contains the specified role name
133
- * @method Role#hasRole
134
- * @param {String} roleChildName Name of role
135
- * @param {Function} cb Callback function
136
- * @return {Role} Return current instance of role
137
- */
138
-
139
- }, {
140
- key: 'hasRole',
141
- value: function hasRole(roleChildName, cb) {
142
- this.rbac.hasRole(this.name, roleChildName, cb);
143
- return this;
144
- }
43
+ /**
44
+ * Return true if contains permission
45
+ * @method Role#can
46
+ * @param {string} action Name of action
47
+ * @param {string} resource Name of resource
48
+ */
49
+ async can(action, resource) {
50
+ return this.rbac.can(this.name, action, resource);
51
+ }
145
52
 
146
- /**
147
- * Return array of permission assigned to actual role
148
- * @method Role#getScope
149
- * @param {Function} cb Callback function
150
- * @return {Role} Return current instance of role
151
- */
53
+ /**
54
+ * Check if the role has any of the given permissions
55
+ * @method Role#canAny
56
+ * @param {Array} permissions List of permissions. Each has structure (String action, String resource)
57
+ */
58
+ async canAny(permissions) {
59
+ return this.rbac.canAny(this.name, permissions);
60
+ }
152
61
 
153
- }, {
154
- key: 'getScope',
155
- value: function getScope(cb) {
156
- this.rbac.getScope(this.name, cb);
157
- return this;
158
- }
159
- }]);
62
+ /**
63
+ * Check if the model has all of the given permissions
64
+ * @method Role#canAll
65
+ * @param {Array} permissions List of permissions. Each has structure (String action, String resource)
66
+ */
67
+ async canAll(permissions) {
68
+ return this.rbac.canAll(this.name, permissions);
69
+ }
160
70
 
161
- return Role;
162
- }(_Base3.default);
71
+ /**
72
+ * Return true if the current role contains the specified role name
73
+ * @method Role#hasRole
74
+ * @param {String} roleChildName Name of role
75
+ */
76
+ async hasRole(roleChildName) {
77
+ return this.rbac.hasRole(this.name, roleChildName);
78
+ }
163
79
 
164
- exports.default = Role;
80
+ /**
81
+ * Return array of permission assigned to actual role
82
+ * @method Role#getScope
83
+ */
84
+ async getScope() {
85
+ return this.rbac.getScope(this.name);
86
+ }
87
+ }
88
+ exports.default = Role;
89
+ //# sourceMappingURL=Role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Role.js","names":["_Base","_interopRequireDefault","require","_Permission","e","__esModule","default","Role","Base","constructor","rbac","name","Permission","isValidName","options","delimiter","Error","grant","item","revoke","can","action","resource","canAny","permissions","canAll","hasRole","roleChildName","getScope","exports"],"sources":["../src/Role.js"],"sourcesContent":["// @flow\nimport Base from './Base';\nimport Permission from './Permission';\nimport type RBAC from './RBAC';\n\nexport default class Role extends Base {\n /**\n * Role constructor\n * @constructor Role\n * @extends {Base}\n * @param {RBAC} rbac Instance of the RBAC\n * @param {String} name Name of the role\n */\n constructor(rbac: RBAC, name: string) {\n if (!Permission.isValidName(name, rbac.options.delimiter)) {\n throw new Error('Role has no valid name');\n }\n\n super(rbac, name);\n }\n\n /**\n * Add role or permission to current role\n * @method Role#grant\n * @param {Role|Permission} item Instance of role or permission\n */\n async grant(item: Base) {\n return this.rbac.grant(this, item);\n }\n\n /**\n * Remove role or permission from current role\n * @method Role#revoke\n * @param {Role|Permission} item Instance of role or permission\n */\n async revoke(item: Base): boolean {\n return this.rbac.revoke(this, item);\n }\n\n /**\n * Return true if contains permission\n * @method Role#can\n * @param {string} action Name of action\n * @param {string} resource Name of resource\n */\n async can(action: string, resource: string): boolean {\n return this.rbac.can(this.name, action, resource);\n }\n\n /**\n * Check if the role has any of the given permissions\n * @method Role#canAny\n * @param {Array} permissions List of permissions. Each has structure (String action, String resource)\n */\n async canAny(permissions): boolean {\n return this.rbac.canAny(this.name, permissions);\n }\n\n /**\n * Check if the model has all of the given permissions\n * @method Role#canAll\n * @param {Array} permissions List of permissions. Each has structure (String action, String resource)\n */\n async canAll(permissions): boolean {\n return this.rbac.canAll(this.name, permissions);\n }\n\n /**\n * Return true if the current role contains the specified role name\n * @method Role#hasRole\n * @param {String} roleChildName Name of role\n */\n async hasRole(roleChildName: string): boolean {\n return this.rbac.hasRole(this.name, roleChildName);\n }\n\n /**\n * Return array of permission assigned to actual role\n * @method Role#getScope\n */\n async getScope(): Permission[] {\n return this.rbac.getScope(this.name);\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGvB,MAAMG,IAAI,SAASC,aAAI,CAAC;EACrC;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,IAAU,EAAEC,IAAY,EAAE;IACpC,IAAI,CAACC,mBAAU,CAACC,WAAW,CAACF,IAAI,EAAED,IAAI,CAACI,OAAO,CAACC,SAAS,CAAC,EAAE;MACzD,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;IAC3C;IAEA,KAAK,CAACN,IAAI,EAAEC,IAAI,CAAC;EACnB;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMM,KAAKA,CAACC,IAAU,EAAE;IACtB,OAAO,IAAI,CAACR,IAAI,CAACO,KAAK,CAAC,IAAI,EAAEC,IAAI,CAAC;EACpC;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMC,MAAMA,CAACD,IAAU,EAAW;IAChC,OAAO,IAAI,CAACR,IAAI,CAACS,MAAM,CAAC,IAAI,EAAED,IAAI,CAAC;EACrC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAME,GAAGA,CAACC,MAAc,EAAEC,QAAgB,EAAW;IACnD,OAAO,IAAI,CAACZ,IAAI,CAACU,GAAG,CAAC,IAAI,CAACT,IAAI,EAAEU,MAAM,EAAEC,QAAQ,CAAC;EACnD;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMC,MAAMA,CAACC,WAAW,EAAW;IACjC,OAAO,IAAI,CAACd,IAAI,CAACa,MAAM,CAAC,IAAI,CAACZ,IAAI,EAAEa,WAAW,CAAC;EACjD;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMC,MAAMA,CAACD,WAAW,EAAW;IACjC,OAAO,IAAI,CAACd,IAAI,CAACe,MAAM,CAAC,IAAI,CAACd,IAAI,EAAEa,WAAW,CAAC;EACjD;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAME,OAAOA,CAACC,aAAqB,EAAW;IAC5C,OAAO,IAAI,CAACjB,IAAI,CAACgB,OAAO,CAAC,IAAI,CAACf,IAAI,EAAEgB,aAAa,CAAC;EACpD;;EAEA;AACF;AACA;AACA;EACE,MAAMC,QAAQA,CAAA,EAAiB;IAC7B,OAAO,IAAI,CAAClB,IAAI,CAACkB,QAAQ,CAAC,IAAI,CAACjB,IAAI,CAAC;EACtC;AACF;AAACkB,OAAA,CAAAvB,OAAA,GAAAC,IAAA","ignoreList":[]}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _Permission = _interopRequireDefault(require("./Permission"));
8
+ var _Role = _interopRequireDefault(require("./Role"));
9
+ var _Base = _interopRequireDefault(require("./Base"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ class Storage {
12
+ useRBAC(rbac) {
13
+ if (this.rbac) {
14
+ throw new Error('Storage is already in use with another instance of RBAC');
15
+ }
16
+ this.rbac = rbac;
17
+ }
18
+
19
+ /**
20
+ * Add permission or role
21
+ * @method Storage#add
22
+ * @param {Base} item Instance of role or permission
23
+ */
24
+ async add(item) {
25
+ throw new Error('Storage method add is not implemented');
26
+ }
27
+
28
+ /**
29
+ * Remove permission or role
30
+ * @method Storage#remove
31
+ * @param {Base} item Instance of role or permission
32
+ */
33
+ async remove(item) {
34
+ throw new Error('Storage method remove is not implemented');
35
+ }
36
+
37
+ /**
38
+ * Add (grant) permission or role to hierarchy of actual role
39
+ * @method Storage#grant
40
+ * @param {Role} role Instance of role
41
+ * @param {Base} child Instance of role or permission
42
+ */
43
+ async grant(role, child) {
44
+ throw new Error('Storage method grant is not implemented');
45
+ }
46
+
47
+ /**
48
+ * Remove (revoke) permission or role from hierarchy of actual role
49
+ * @method Storage#revoke
50
+ * @param {Role} role Instance of role
51
+ * @param {Base} child Instance of role or permission
52
+ */
53
+ async revoke(role, child) {
54
+ throw new Error('Storage method revoke is not implemented');
55
+ }
56
+
57
+ /**
58
+ * Get instance of permission or role by his name
59
+ * @method Storage#get
60
+ * @param {String} name Name of role or permission
61
+ * @return {Base}
62
+ */
63
+ async get(name) {
64
+ throw new Error('Storage method get is not implemented');
65
+ }
66
+
67
+ /**
68
+ * Get all instances of Roles
69
+ * @method Storage#getRoles
70
+ * @return {Role[]}
71
+ */
72
+ async getRoles() {
73
+ throw new Error('Storage method getRoles is not implemented');
74
+ }
75
+
76
+ /**
77
+ * Get all instances of Permissions
78
+ * @method Storage#getPermissions
79
+ * @return {Permission[]}
80
+ */
81
+ async getPermissions() {
82
+ throw new Error('Storage method getPermissions is not implemented');
83
+ }
84
+
85
+ /**
86
+ * Get instances of Roles and Permissions assigned to role
87
+ * @method Storage#getGrants
88
+ * @param {String} role Name of role
89
+ * @return {Base[]}
90
+ */
91
+ async getGrants(role) {
92
+ throw new Error('Storage method getGrants is not implemented');
93
+ }
94
+
95
+ /**
96
+ * Get instance of role by his name
97
+ * @method Storage#getRole
98
+ * @param {String} name Name of role
99
+ * @return {Role}
100
+ */
101
+ async getRole(name) {
102
+ const role = await this.get(name);
103
+ if (role && role instanceof _Role.default) {
104
+ return role;
105
+ }
106
+ return undefined;
107
+ }
108
+
109
+ /**
110
+ * Get instance of permission by his name
111
+ * @method Storage#getPermission
112
+ * @param {string} action Name of action
113
+ * @param {string} resource Name of resource
114
+ * @return {Permission} Instance of actual storage
115
+ */
116
+ async getPermission(action, resource) {
117
+ const name = _Permission.default.createName(action, resource, this.rbac.options.delimiter);
118
+ const item = await this.get(name);
119
+ if (item && item instanceof _Permission.default) {
120
+ return item;
121
+ }
122
+ return undefined;
123
+ }
124
+
125
+ /**
126
+ * Return true with callback if role or permission exists
127
+ * @method Storage#exists
128
+ * @param {string} name Name of role or permission
129
+ * @return {boolean}
130
+ */
131
+ async exists(name) {
132
+ const item = await this.get(name);
133
+ return !!item;
134
+ }
135
+
136
+ /**
137
+ * Return true with callback if role exists
138
+ * @method Storage#existsRole
139
+ * @param {string} name Name of role
140
+ * @return {boolean}
141
+ */
142
+ async existsRole(name) {
143
+ const role = await this.getRole(name);
144
+ return !!role;
145
+ }
146
+
147
+ /**
148
+ * Return true with callback if permission exists
149
+ * @method Storage#existsPermission
150
+ * @param {string} action Name of action
151
+ * @param {string} resource Name of resource
152
+ * @return {boolean}
153
+ */
154
+ async existsPermission(action, resource) {
155
+ const permission = await this.getPermission(action, resource);
156
+ return !!permission;
157
+ }
158
+ }
159
+ exports.default = Storage;
160
+ //# sourceMappingURL=Storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Storage.js","names":["_Permission","_interopRequireDefault","require","_Role","_Base","e","__esModule","default","Storage","useRBAC","rbac","Error","add","item","remove","grant","role","child","revoke","get","name","getRoles","getPermissions","getGrants","getRole","Role","undefined","getPermission","action","resource","Permission","createName","options","delimiter","exists","existsRole","existsPermission","permission","exports"],"sources":["../src/Storage.js"],"sourcesContent":["// @flow\nimport Permission from './Permission';\nimport Role from './Role';\nimport Base from './Base';\nimport type RBAC from './RBAC';\n\nexport default class Storage {\n useRBAC(rbac: RBAC): void {\n if (this.rbac) {\n throw new Error('Storage is already in use with another instance of RBAC');\n }\n\n this.rbac = rbac;\n }\n\n /**\n * Add permission or role\n * @method Storage#add\n * @param {Base} item Instance of role or permission\n */\n async add(item: Base): boolean {\n throw new Error('Storage method add is not implemented');\n }\n\n /**\n * Remove permission or role\n * @method Storage#remove\n * @param {Base} item Instance of role or permission\n */\n async remove(item: Base): boolean {\n throw new Error('Storage method remove is not implemented');\n }\n\n /**\n * Add (grant) permission or role to hierarchy of actual role\n * @method Storage#grant\n * @param {Role} role Instance of role\n * @param {Base} child Instance of role or permission\n */\n async grant(role: Role, child: Base): boolean {\n throw new Error('Storage method grant is not implemented');\n }\n\n /**\n * Remove (revoke) permission or role from hierarchy of actual role\n * @method Storage#revoke\n * @param {Role} role Instance of role\n * @param {Base} child Instance of role or permission\n */\n async revoke(role: Role, child: Base): boolean {\n throw new Error('Storage method revoke is not implemented');\n }\n\n /**\n * Get instance of permission or role by his name\n * @method Storage#get\n * @param {String} name Name of role or permission\n * @return {Base}\n */\n async get(name: string): ?Base {\n throw new Error('Storage method get is not implemented');\n }\n\n /**\n * Get all instances of Roles\n * @method Storage#getRoles\n * @return {Role[]}\n */\n async getRoles(): Role[] {\n throw new Error('Storage method getRoles is not implemented');\n }\n\n /**\n * Get all instances of Permissions\n * @method Storage#getPermissions\n * @return {Permission[]}\n */\n async getPermissions(): Permission[] {\n throw new Error('Storage method getPermissions is not implemented');\n }\n\n /**\n * Get instances of Roles and Permissions assigned to role\n * @method Storage#getGrants\n * @param {String} role Name of role\n * @return {Base[]}\n */\n async getGrants(role: string): Base[] {\n throw new Error('Storage method getGrants is not implemented');\n }\n\n /**\n * Get instance of role by his name\n * @method Storage#getRole\n * @param {String} name Name of role\n * @return {Role}\n */\n async getRole(name: string): ?Role {\n const role = await this.get(name);\n if (role && role instanceof Role) {\n return role;\n }\n\n return undefined;\n }\n\n /**\n * Get instance of permission by his name\n * @method Storage#getPermission\n * @param {string} action Name of action\n * @param {string} resource Name of resource\n * @return {Permission} Instance of actual storage\n */\n async getPermission(action: string, resource: string): ?Permission {\n const name = Permission.createName(action, resource, this.rbac.options.delimiter);\n const item = await this.get(name);\n if (item && item instanceof Permission) {\n return item;\n }\n\n return undefined;\n }\n\n /**\n * Return true with callback if role or permission exists\n * @method Storage#exists\n * @param {string} name Name of role or permission\n * @return {boolean}\n */\n async exists(name: string): boolean {\n const item = await this.get(name);\n return !!item;\n }\n\n /**\n * Return true with callback if role exists\n * @method Storage#existsRole\n * @param {string} name Name of role\n * @return {boolean}\n */\n async existsRole(name: string): boolean {\n const role = await this.getRole(name);\n return !!role;\n }\n\n /**\n * Return true with callback if permission exists\n * @method Storage#existsPermission\n * @param {string} action Name of action\n * @param {string} resource Name of resource\n * @return {boolean}\n */\n async existsPermission(action: string, resource: string): boolean {\n const permission = await this.getPermission(action, resource);\n return !!permission;\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/dist/index.js CHANGED
@@ -1,39 +1,49 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Mongoose = exports.Memory = exports.Storage = exports.Permission = exports.Role = undefined;
7
-
8
- var _RBAC = require('./RBAC');
9
-
10
- var _RBAC2 = _interopRequireDefault(_RBAC);
11
-
12
- var _Role = require('./Role');
13
-
14
- var _Role2 = _interopRequireDefault(_Role);
15
-
16
- var _Permission = require('./Permission');
17
-
18
- var _Permission2 = _interopRequireDefault(_Permission);
19
-
20
- var _storages = require('./storages');
21
-
22
- var _storages2 = _interopRequireDefault(_storages);
23
-
24
- var _Mongoose = require('./storages/Mongoose');
25
-
26
- var _Mongoose2 = _interopRequireDefault(_Mongoose);
27
-
28
- var _Memory = require('./storages/Memory');
29
-
30
- var _Memory2 = _interopRequireDefault(_Memory);
31
-
32
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
-
34
- exports.Role = _Role2.default;
35
- exports.Permission = _Permission2.default;
36
- exports.Storage = _storages2.default;
37
- exports.Memory = _Memory2.default;
38
- exports.Mongoose = _Mongoose2.default;
39
- exports.default = _RBAC2.default;
6
+ Object.defineProperty(exports, "Base", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Base.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "Memory", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _Memory.default;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "Permission", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _Permission.default;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "RBAC", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _RBAC.default;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "Role", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _Role.default;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "Storage", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _Storage.default;
40
+ }
41
+ });
42
+ var _RBAC = _interopRequireDefault(require("./RBAC"));
43
+ var _Base = _interopRequireDefault(require("./Base"));
44
+ var _Role = _interopRequireDefault(require("./Role"));
45
+ var _Permission = _interopRequireDefault(require("./Permission"));
46
+ var _Storage = _interopRequireDefault(require("./Storage"));
47
+ var _Memory = _interopRequireDefault(require("./Memory"));
48
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_RBAC","_interopRequireDefault","require","_Base","_Role","_Permission","_Storage","_Memory","e","__esModule","default"],"sources":["../src/index.js"],"sourcesContent":["export RBAC from './RBAC';\nexport Base from './Base';\nexport Role from './Role';\nexport Permission from './Permission';\nexport Storage from './Storage';\nexport Memory from './Memory';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,OAAA,GAAAN,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}