@nocobase/plugin-acl 0.11.1-alpha.5 → 0.12.0-alpha.2
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.
- package/client.d.ts +2 -3
- package/client.js +1 -1
- package/dist/client/index.js +11 -0
- package/{lib/server → dist}/index.d.ts +1 -0
- package/dist/index.js +18 -0
- package/{src/server/actions/available-actions.ts → dist/server/actions/available-actions.js} +7 -5
- package/{src/server/actions/role-check.ts → dist/server/actions/role-check.js} +17 -22
- package/dist/server/actions/role-collections.js +53 -0
- package/dist/server/actions/user-setDefaultRole.js +43 -0
- package/dist/server/collections/roles-users.js +10 -0
- package/dist/server/collections/roles.js +103 -0
- package/dist/server/collections/rolesResources.js +35 -0
- package/dist/server/collections/rolesResourcesActions.js +33 -0
- package/dist/server/collections/rolesResourcesScopes.js +27 -0
- package/dist/server/collections/users.js +35 -0
- package/dist/server/index.js +11 -0
- package/dist/server/middlewares/setCurrentRole.js +31 -0
- package/dist/server/migrations/20221214072638-set-role-snippets.js +25 -0
- package/dist/server/model/RoleModel.js +23 -0
- package/dist/server/model/RoleResourceActionModel.js +64 -0
- package/dist/server/model/RoleResourceModel.js +55 -0
- package/dist/server/server.js +709 -0
- package/package.json +12 -21
- package/server.d.ts +3 -3
- package/server.js +1 -1
- package/lib/client/index.js +0 -22
- package/lib/index.js +0 -13
- package/lib/server/actions/available-actions.js +0 -34
- package/lib/server/actions/role-check.js +0 -77
- package/lib/server/actions/role-collections.js +0 -98
- package/lib/server/actions/user-setDefaultRole.js +0 -52
- package/lib/server/collections/roles-users.js +0 -16
- package/lib/server/collections/roles.js +0 -92
- package/lib/server/collections/rolesResources.js +0 -31
- package/lib/server/collections/rolesResourcesActions.js +0 -31
- package/lib/server/collections/rolesResourcesScopes.js +0 -25
- package/lib/server/collections/users.js +0 -41
- package/lib/server/index.js +0 -13
- package/lib/server/middlewares/setCurrentRole.js +0 -45
- package/lib/server/migrations/20221214072638-set-role-snippets.js +0 -43
- package/lib/server/model/RoleModel.js +0 -35
- package/lib/server/model/RoleResourceActionModel.js +0 -91
- package/lib/server/model/RoleResourceModel.js +0 -106
- package/lib/server/server.js +0 -947
- package/src/client/index.ts +0 -8
- package/src/index.ts +0 -1
- package/src/server/__tests__/acl.test.ts +0 -835
- package/src/server/__tests__/actions.test.ts +0 -141
- package/src/server/__tests__/association-field.test.ts +0 -413
- package/src/server/__tests__/configuration.test.ts +0 -70
- package/src/server/__tests__/list-action.test.ts +0 -446
- package/src/server/__tests__/middleware.test.ts +0 -210
- package/src/server/__tests__/own.test.ts +0 -124
- package/src/server/__tests__/prepare.ts +0 -20
- package/src/server/__tests__/role-check.test.ts +0 -46
- package/src/server/__tests__/role-resource.test.ts +0 -177
- package/src/server/__tests__/role-user.test.ts +0 -127
- package/src/server/__tests__/role.test.ts +0 -118
- package/src/server/__tests__/scope.test.ts +0 -55
- package/src/server/__tests__/setCurrentRole.test.ts +0 -86
- package/src/server/__tests__/snippets.test.ts +0 -35
- package/src/server/__tests__/users.test.ts +0 -136
- package/src/server/__tests__/write-role-to-acl.test.ts +0 -41
- package/src/server/actions/role-collections.ts +0 -95
- package/src/server/actions/user-setDefaultRole.ts +0 -47
- package/src/server/collections/roles-users.ts +0 -8
- package/src/server/collections/roles.ts +0 -101
- package/src/server/collections/rolesResources.ts +0 -33
- package/src/server/collections/rolesResourcesActions.ts +0 -31
- package/src/server/collections/rolesResourcesScopes.ts +0 -25
- package/src/server/collections/users.ts +0 -31
- package/src/server/index.ts +0 -1
- package/src/server/middlewares/setCurrentRole.ts +0 -35
- package/src/server/migrations/20221214072638-set-role-snippets.ts +0 -23
- package/src/server/model/RoleModel.ts +0 -23
- package/src/server/model/RoleResourceActionModel.ts +0 -95
- package/src/server/model/RoleResourceModel.ts +0 -74
- package/src/server/server.ts +0 -854
- /package/{lib → dist}/client/index.d.ts +0 -0
- /package/{lib → dist}/server/actions/available-actions.d.ts +0 -0
- /package/{lib → dist}/server/actions/role-check.d.ts +0 -0
- /package/{lib → dist}/server/actions/role-collections.d.ts +0 -0
- /package/{lib → dist}/server/actions/user-setDefaultRole.d.ts +0 -0
- /package/{lib → dist}/server/collections/roles-users.d.ts +0 -0
- /package/{lib → dist}/server/collections/roles.d.ts +0 -0
- /package/{lib → dist}/server/collections/rolesResources.d.ts +0 -0
- /package/{lib → dist}/server/collections/rolesResourcesActions.d.ts +0 -0
- /package/{lib → dist}/server/collections/rolesResourcesScopes.d.ts +0 -0
- /package/{lib → dist}/server/collections/users.d.ts +0 -0
- /package/{lib → dist/server}/index.d.ts +0 -0
- /package/{lib → dist}/server/middlewares/setCurrentRole.d.ts +0 -0
- /package/{lib → dist}/server/migrations/20221214072638-set-role-snippets.d.ts +0 -0
- /package/{lib → dist}/server/model/RoleModel.d.ts +0 -0
- /package/{lib → dist}/server/model/RoleResourceActionModel.d.ts +0 -0
- /package/{lib → dist}/server/model/RoleResourceModel.d.ts +0 -0
- /package/{lib → dist}/server/server.d.ts +0 -0
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.setCurrentRole = setCurrentRole;
|
|
7
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
8
|
-
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
9
|
-
function setCurrentRole(_x, _x2) {
|
|
10
|
-
return _setCurrentRole.apply(this, arguments);
|
|
11
|
-
}
|
|
12
|
-
function _setCurrentRole() {
|
|
13
|
-
_setCurrentRole = _asyncToGenerator(function* (ctx, next) {
|
|
14
|
-
const currentRole = ctx.get('X-Role');
|
|
15
|
-
if (currentRole === 'anonymous') {
|
|
16
|
-
ctx.state.currentRole = currentRole;
|
|
17
|
-
return next();
|
|
18
|
-
}
|
|
19
|
-
if (!ctx.state.currentUser) {
|
|
20
|
-
return next();
|
|
21
|
-
}
|
|
22
|
-
const repository = ctx.db.getRepository('users.roles', ctx.state.currentUser.id);
|
|
23
|
-
const roles = yield repository.find();
|
|
24
|
-
ctx.state.currentUser.setDataValue('roles', roles);
|
|
25
|
-
// 1. If the X-Role is set, use the specified role
|
|
26
|
-
if (currentRole) {
|
|
27
|
-
var _roles$find;
|
|
28
|
-
ctx.state.currentRole = (_roles$find = roles.find(role => role.name === currentRole)) === null || _roles$find === void 0 ? void 0 : _roles$find.name;
|
|
29
|
-
}
|
|
30
|
-
// 2. If the X-Role is not set, use the default role
|
|
31
|
-
else {
|
|
32
|
-
var _ref;
|
|
33
|
-
const defaultRole = roles.find(item => {
|
|
34
|
-
var _item$rolesUsers;
|
|
35
|
-
return item === null || item === void 0 ? void 0 : (_item$rolesUsers = item.rolesUsers) === null || _item$rolesUsers === void 0 ? void 0 : _item$rolesUsers.default;
|
|
36
|
-
});
|
|
37
|
-
ctx.state.currentRole = (_ref = defaultRole || roles[0]) === null || _ref === void 0 ? void 0 : _ref.name;
|
|
38
|
-
}
|
|
39
|
-
if (!ctx.state.currentRole) {
|
|
40
|
-
return ctx.throw(401, 'User role not found');
|
|
41
|
-
}
|
|
42
|
-
yield next();
|
|
43
|
-
});
|
|
44
|
-
return _setCurrentRole.apply(this, arguments);
|
|
45
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
function _server() {
|
|
8
|
-
const data = require("@nocobase/server");
|
|
9
|
-
_server = function _server() {
|
|
10
|
-
return data;
|
|
11
|
-
};
|
|
12
|
-
return data;
|
|
13
|
-
}
|
|
14
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
15
|
-
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
16
|
-
class _default extends _server().Migration {
|
|
17
|
-
up() {
|
|
18
|
-
var _this = this;
|
|
19
|
-
return _asyncToGenerator(function* () {
|
|
20
|
-
const result = yield _this.app.version.satisfies('<0.9.3-alpha.1');
|
|
21
|
-
if (!result) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
yield _this.app.db.getRepository('roles').update({
|
|
25
|
-
filter: {
|
|
26
|
-
$or: [{
|
|
27
|
-
allowConfigure: true
|
|
28
|
-
}, {
|
|
29
|
-
name: 'root'
|
|
30
|
-
}]
|
|
31
|
-
},
|
|
32
|
-
values: {
|
|
33
|
-
snippets: ['ui.*', 'pm', 'pm.*'],
|
|
34
|
-
allowConfigure: false
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
})();
|
|
38
|
-
}
|
|
39
|
-
down() {
|
|
40
|
-
return _asyncToGenerator(function* () {})();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
exports.default = _default;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.RoleModel = void 0;
|
|
7
|
-
function _database() {
|
|
8
|
-
const data = require("@nocobase/database");
|
|
9
|
-
_database = function _database() {
|
|
10
|
-
return data;
|
|
11
|
-
};
|
|
12
|
-
return data;
|
|
13
|
-
}
|
|
14
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
15
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
16
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
18
|
-
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
19
|
-
class RoleModel extends _database().Model {
|
|
20
|
-
writeToAcl(options) {
|
|
21
|
-
const acl = options.acl;
|
|
22
|
-
const roleName = this.get('name');
|
|
23
|
-
let role = acl.getRole(roleName);
|
|
24
|
-
if (!role) {
|
|
25
|
-
role = acl.define({
|
|
26
|
-
role: roleName
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
role.setStrategy(_objectSpread(_objectSpread({}, this.get('strategy') || {}), {}, {
|
|
30
|
-
allowConfigure: this.get('allowConfigure')
|
|
31
|
-
}));
|
|
32
|
-
role.snippets = new Set(this.get('snippets'));
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
exports.RoleModel = RoleModel;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.RoleResourceActionModel = void 0;
|
|
7
|
-
function _database() {
|
|
8
|
-
const data = require("@nocobase/database");
|
|
9
|
-
_database = function _database() {
|
|
10
|
-
return data;
|
|
11
|
-
};
|
|
12
|
-
return data;
|
|
13
|
-
}
|
|
14
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
15
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
16
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
17
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
18
|
-
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
19
|
-
class RoleResourceActionModel extends _database().Model {
|
|
20
|
-
writeToACL(options) {
|
|
21
|
-
var _this = this;
|
|
22
|
-
return _asyncToGenerator(function* () {
|
|
23
|
-
// @ts-ignore
|
|
24
|
-
const db = _this.constructor.database;
|
|
25
|
-
const resourceName = options.resourceName,
|
|
26
|
-
role = options.role,
|
|
27
|
-
acl = options.acl,
|
|
28
|
-
associationFieldsActions = options.associationFieldsActions,
|
|
29
|
-
grantHelper = options.grantHelper;
|
|
30
|
-
const actionName = _this.get('name');
|
|
31
|
-
const fields = _this.get('fields');
|
|
32
|
-
const actionPath = `${resourceName}:${actionName}`;
|
|
33
|
-
const actionParams = {
|
|
34
|
-
fields
|
|
35
|
-
};
|
|
36
|
-
// @ts-ignore
|
|
37
|
-
const scope = yield _this.getScope();
|
|
38
|
-
if (scope) {
|
|
39
|
-
actionParams['own'] = scope.get('key') === 'own';
|
|
40
|
-
actionParams['filter'] = scope.get('scope');
|
|
41
|
-
}
|
|
42
|
-
role.grantAction(actionPath, actionParams);
|
|
43
|
-
const collection = db.getCollection(resourceName);
|
|
44
|
-
if (!collection) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const availableAction = acl.resolveActionAlias(actionName);
|
|
48
|
-
var _iterator = _createForOfIteratorHelper(fields),
|
|
49
|
-
_step;
|
|
50
|
-
try {
|
|
51
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
52
|
-
var _associationFieldsAct;
|
|
53
|
-
const field = _step.value;
|
|
54
|
-
const collectionField = collection.getField(field);
|
|
55
|
-
if (!collectionField) {
|
|
56
|
-
console.log(`field ${field} does not exist at ${collection.name}`);
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
const fieldType = collectionField.get('type');
|
|
60
|
-
const fieldActions = associationFieldsActions === null || associationFieldsActions === void 0 ? void 0 : (_associationFieldsAct = associationFieldsActions[fieldType]) === null || _associationFieldsAct === void 0 ? void 0 : _associationFieldsAct[availableAction];
|
|
61
|
-
const fieldTarget = collectionField.get('target');
|
|
62
|
-
if (fieldActions) {
|
|
63
|
-
// grant association actions to role
|
|
64
|
-
const associationActions = fieldActions.associationActions || [];
|
|
65
|
-
associationActions.forEach(associationAction => {
|
|
66
|
-
const actionName = `${resourceName}.${collectionField.get('name')}:${associationAction}`;
|
|
67
|
-
role.grantAction(actionName);
|
|
68
|
-
});
|
|
69
|
-
const targetActions = fieldActions.targetActions || [];
|
|
70
|
-
targetActions.forEach(targetAction => {
|
|
71
|
-
const targetActionPath = `${fieldTarget}:${targetAction}`;
|
|
72
|
-
const existsAction = role.getActionParams(targetActionPath);
|
|
73
|
-
if (existsAction) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
// set resource target action with current resourceName
|
|
77
|
-
grantHelper.resourceTargetActionMap.set(`${role.name}.${resourceName}`, [...(grantHelper.resourceTargetActionMap.get(resourceName) || []), targetActionPath]);
|
|
78
|
-
grantHelper.targetActionResourceMap.set(targetActionPath, [...(grantHelper.targetActionResourceMap.get(targetActionPath) || []), `${role.name}.${resourceName}`]);
|
|
79
|
-
role.grantAction(targetActionPath);
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
} catch (err) {
|
|
84
|
-
_iterator.e(err);
|
|
85
|
-
} finally {
|
|
86
|
-
_iterator.f();
|
|
87
|
-
}
|
|
88
|
-
})();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
exports.RoleResourceActionModel = RoleResourceActionModel;
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.RoleResourceModel = void 0;
|
|
7
|
-
function _acl() {
|
|
8
|
-
const data = require("@nocobase/acl");
|
|
9
|
-
_acl = function _acl() {
|
|
10
|
-
return data;
|
|
11
|
-
};
|
|
12
|
-
return data;
|
|
13
|
-
}
|
|
14
|
-
function _database() {
|
|
15
|
-
const data = require("@nocobase/database");
|
|
16
|
-
_database = function _database() {
|
|
17
|
-
return data;
|
|
18
|
-
};
|
|
19
|
-
return data;
|
|
20
|
-
}
|
|
21
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
22
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
23
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
24
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
25
|
-
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
26
|
-
class RoleResourceModel extends _database().Model {
|
|
27
|
-
revoke(options) {
|
|
28
|
-
return _asyncToGenerator(function* () {
|
|
29
|
-
const role = options.role,
|
|
30
|
-
resourceName = options.resourceName,
|
|
31
|
-
grantHelper = options.grantHelper;
|
|
32
|
-
role.revokeResource(resourceName);
|
|
33
|
-
const targetActions = grantHelper.resourceTargetActionMap.get(`${role.name}.${resourceName}`) || [];
|
|
34
|
-
var _iterator = _createForOfIteratorHelper(targetActions),
|
|
35
|
-
_step;
|
|
36
|
-
try {
|
|
37
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
38
|
-
const targetAction = _step.value;
|
|
39
|
-
const targetActionResource = (grantHelper.targetActionResourceMap.get(targetAction) || []).filter(item => `${role.name}.${resourceName}` !== item);
|
|
40
|
-
grantHelper.targetActionResourceMap.set(targetAction, targetActionResource);
|
|
41
|
-
if (targetActionResource.length == 0) {
|
|
42
|
-
role.revokeAction(targetAction);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
} catch (err) {
|
|
46
|
-
_iterator.e(err);
|
|
47
|
-
} finally {
|
|
48
|
-
_iterator.f();
|
|
49
|
-
}
|
|
50
|
-
grantHelper.resourceTargetActionMap.set(`${role.name}.${resourceName}`, []);
|
|
51
|
-
})();
|
|
52
|
-
}
|
|
53
|
-
writeToACL(options) {
|
|
54
|
-
var _this = this;
|
|
55
|
-
return _asyncToGenerator(function* () {
|
|
56
|
-
const acl = options.acl,
|
|
57
|
-
associationFieldsActions = options.associationFieldsActions,
|
|
58
|
-
grantHelper = options.grantHelper;
|
|
59
|
-
const resourceName = _this.get('name');
|
|
60
|
-
const roleName = _this.get('roleName');
|
|
61
|
-
const role = acl.getRole(roleName);
|
|
62
|
-
if (!role) {
|
|
63
|
-
console.log(`${roleName} role does not exist`);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
// revoke resource of role
|
|
67
|
-
yield _this.revoke({
|
|
68
|
-
role,
|
|
69
|
-
resourceName,
|
|
70
|
-
grantHelper
|
|
71
|
-
});
|
|
72
|
-
// @ts-ignore
|
|
73
|
-
if (_this.usingActionsConfig === false) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
const resource = new (_acl().ACLResource)({
|
|
77
|
-
role,
|
|
78
|
-
name: resourceName
|
|
79
|
-
});
|
|
80
|
-
role.resources.set(resourceName, resource);
|
|
81
|
-
// @ts-ignore
|
|
82
|
-
const actions = yield _this.getActions({
|
|
83
|
-
transaction: options.transaction
|
|
84
|
-
});
|
|
85
|
-
var _iterator2 = _createForOfIteratorHelper(actions),
|
|
86
|
-
_step2;
|
|
87
|
-
try {
|
|
88
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
89
|
-
const action = _step2.value;
|
|
90
|
-
yield action.writeToACL({
|
|
91
|
-
acl,
|
|
92
|
-
role,
|
|
93
|
-
resourceName,
|
|
94
|
-
associationFieldsActions,
|
|
95
|
-
grantHelper: options.grantHelper
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
} catch (err) {
|
|
99
|
-
_iterator2.e(err);
|
|
100
|
-
} finally {
|
|
101
|
-
_iterator2.f();
|
|
102
|
-
}
|
|
103
|
-
})();
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
exports.RoleResourceModel = RoleResourceModel;
|