@iushev/react-rbac 1.0.16 → 1.0.19
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/build/CheckAccess.d.ts +1 -0
- package/build/CheckAccess.d.ts.map +1 -0
- package/build/CheckAccess.js +1 -0
- package/build/CheckAccess.js.map +1 -0
- package/build/NoAccess.d.ts +1 -0
- package/build/NoAccess.d.ts.map +1 -0
- package/build/NoAccess.js +1 -0
- package/build/NoAccess.js.map +1 -0
- package/build/RbacCheckAccess.d.ts +5 -0
- package/build/RbacCheckAccess.d.ts.map +1 -0
- package/build/RbacCheckAccess.js +90 -60
- package/build/RbacCheckAccess.js.map +1 -0
- package/build/RbacContext.d.ts +1 -0
- package/build/RbacContext.d.ts.map +1 -0
- package/build/RbacContext.js +1 -0
- package/build/RbacContext.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +1 -0
- package/build/index.js.map +1 -0
- package/build/useCheckAccess.d.ts +1 -0
- package/build/useCheckAccess.d.ts.map +1 -0
- package/build/useCheckAccess.js +1 -0
- package/build/useCheckAccess.js.map +1 -0
- package/package.json +4 -1
- package/src/RbacCheckAccess.ts +63 -39
- package/src/useCheckAccess.ts +1 -1
- package/tsconfig.json +3 -2
package/build/CheckAccess.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckAccess.d.ts","sourceRoot":"","sources":["../src/CheckAccess.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD,oBAAY,gBAAgB,GAAG,kBAAkB,GAAG;IAClD,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAChC,CAAC;AAEF,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAgB3C,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
package/build/CheckAccess.js
CHANGED
|
@@ -14,3 +14,4 @@ const CheckAccess = ({ roles, allow, params, match, busy: BusyComponent = () =>
|
|
|
14
14
|
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: hasAccess ? (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children }) : (0, jsx_runtime_1.jsx)(NoAccessComponent, {}) });
|
|
15
15
|
};
|
|
16
16
|
exports.default = CheckAccess;
|
|
17
|
+
//# sourceMappingURL=CheckAccess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckAccess.js","sourceRoot":"","sources":["../src/CheckAccess.tsx"],"names":[],"mappings":";;;;;;AAGA,sEAA8C;AAC9C,0DAAkC;AAOlC,MAAM,WAAW,GAA+B,CAAC,EAC/C,KAAK,EACL,KAAK,EACL,MAAM,EACN,KAAK,EACL,IAAI,EAAE,aAAa,GAAG,GAAG,EAAE,CAAC,IAAI,EAChC,QAAQ,EAAE,iBAAiB,GAAG,kBAAQ,EACtC,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAA,wBAAc,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAEhF,IAAI,QAAQ,EAAE;QACZ,OAAO,uBAAC,aAAa,KAAG,CAAC;KAC1B;IAED,OAAO,2DAAG,SAAS,CAAC,CAAC,CAAC,2DAAG,QAAQ,GAAI,CAAC,CAAC,CAAC,uBAAC,iBAAiB,KAAG,GAAI,CAAC;AACpE,CAAC,CAAC;AAEF,kBAAe,WAAW,CAAC"}
|
package/build/NoAccess.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoAccess.d.ts","sourceRoot":"","sources":["../src/NoAccess.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAOrB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/build/NoAccess.js
CHANGED
|
@@ -5,3 +5,4 @@ const NoAccess = () => {
|
|
|
5
5
|
return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h4", { children: "Access Denied" }), (0, jsx_runtime_1.jsx)("h5", { children: "You don't have permission to access." })] }));
|
|
6
6
|
};
|
|
7
7
|
exports.default = NoAccess;
|
|
8
|
+
//# sourceMappingURL=NoAccess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoAccess.js","sourceRoot":"","sources":["../src/NoAccess.tsx"],"names":[],"mappings":";;;AAEA,MAAM,QAAQ,GAAa,GAAG,EAAE;IAC9B,OAAO,CACL,4CACE,2DAAsB,EACtB,kFAA6C,IACzC,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC"}
|
|
@@ -9,4 +9,9 @@ export default class RbacCheckAccess extends BaseCheckAccess {
|
|
|
9
9
|
constructor(options: RbacCheckAccessOptions);
|
|
10
10
|
checkAccess(username: string, itemName: string, params: RuleParams): Promise<boolean>;
|
|
11
11
|
load(): Promise<void>;
|
|
12
|
+
private getRbacItems;
|
|
13
|
+
private getRbacParents;
|
|
14
|
+
private getRbacRules;
|
|
15
|
+
private getRbacAssignments;
|
|
12
16
|
}
|
|
17
|
+
//# sourceMappingURL=RbacCheckAccess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RbacCheckAccess.d.ts","sourceRoot":"","sources":["../src/RbacCheckAccess.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,eAAe,EACf,sBAAsB,EAOtB,UAAU,EACX,MAAM,cAAc,CAAC;AAEtB,oBAAY,sBAAsB,GAAG,sBAAsB,GAAG;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,eAAe;IAC1D,OAAO,CAAC,aAAa,CAAgB;IAErC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAa;gBAE5D,OAAO,EAAE,sBAAsB;IAsB9B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBlC,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,kBAAkB;CA8B3B"}
|
package/build/RbacCheckAccess.js
CHANGED
|
@@ -12,8 +12,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const rbac_1 = require("@iushev/rbac");
|
|
16
15
|
const axios_1 = __importDefault(require("axios"));
|
|
16
|
+
const http_status_codes_1 = __importDefault(require("http-status-codes"));
|
|
17
|
+
const rbac_1 = require("@iushev/rbac");
|
|
17
18
|
class RbacCheckAccess extends rbac_1.BaseCheckAccess {
|
|
18
19
|
constructor(options) {
|
|
19
20
|
super(options);
|
|
@@ -48,71 +49,100 @@ class RbacCheckAccess extends rbac_1.BaseCheckAccess {
|
|
|
48
49
|
});
|
|
49
50
|
}
|
|
50
51
|
load() {
|
|
52
|
+
var _a;
|
|
51
53
|
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return prevValue;
|
|
66
|
-
}, new Map());
|
|
67
|
-
this.parents = Object.keys(_rbac.items).reduce((prevValue, name) => {
|
|
68
|
-
const item = _rbac.items[name];
|
|
69
|
-
if (!item.children || item.children.length === 0) {
|
|
70
|
-
return prevValue;
|
|
54
|
+
let _rbac;
|
|
55
|
+
try {
|
|
56
|
+
console.log("Load RBAC");
|
|
57
|
+
const response = yield this.axiosInstance.get("/rbac");
|
|
58
|
+
_rbac = response.data;
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
if (axios_1.default.isAxiosError(err) && ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) === http_status_codes_1.default.NOT_FOUND) {
|
|
62
|
+
_rbac = {
|
|
63
|
+
assignments: {},
|
|
64
|
+
items: {},
|
|
65
|
+
rules: {},
|
|
66
|
+
};
|
|
71
67
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
68
|
+
else {
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
this.items = this.getRbacItems(_rbac);
|
|
73
|
+
this.parents = this.getRbacParents(_rbac);
|
|
74
|
+
this.rules = this.getRbacRules(_rbac);
|
|
75
|
+
this.assignments = this.getRbacAssignments(_rbac);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
getRbacItems({ items }) {
|
|
79
|
+
return Object.keys(items).reduce((prevValue, name) => {
|
|
80
|
+
var _a, _b;
|
|
81
|
+
const item = items[name];
|
|
82
|
+
const ItemClass = item.type === rbac_1.ItemType.permission ? rbac_1.Permission : rbac_1.Role;
|
|
83
|
+
prevValue.set(name, new ItemClass({
|
|
84
|
+
name,
|
|
85
|
+
type: item.type,
|
|
86
|
+
description: (_a = item.description) !== null && _a !== void 0 ? _a : null,
|
|
87
|
+
ruleName: (_b = item.ruleName) !== null && _b !== void 0 ? _b : null,
|
|
88
|
+
}));
|
|
89
|
+
return prevValue;
|
|
90
|
+
}, new Map());
|
|
91
|
+
}
|
|
92
|
+
getRbacParents({ items }) {
|
|
93
|
+
return Object.keys(items).reduce((prevValue, name) => {
|
|
94
|
+
const item = items[name];
|
|
95
|
+
if (!item.children || item.children.length === 0) {
|
|
81
96
|
return prevValue;
|
|
82
|
-
}
|
|
83
|
-
|
|
97
|
+
}
|
|
98
|
+
item.children.forEach((childName) => {
|
|
99
|
+
if (!this.items.has(childName)) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (!prevValue.has(childName)) {
|
|
103
|
+
prevValue.set(childName, new Map());
|
|
104
|
+
}
|
|
105
|
+
prevValue.get(childName).set(name, this.items.get(name));
|
|
106
|
+
});
|
|
107
|
+
return prevValue;
|
|
108
|
+
}, new Map());
|
|
109
|
+
}
|
|
110
|
+
getRbacRules({ rules }) {
|
|
111
|
+
return Object.keys(rules).reduce((prevValue, name) => {
|
|
112
|
+
var _a;
|
|
113
|
+
const ruleData = rules[name];
|
|
114
|
+
const RuleClass = (_a = this.ruleClasses.get(ruleData.data.typeName)) !== null && _a !== void 0 ? _a : rbac_1.Rule;
|
|
115
|
+
const rule = new RuleClass(name, JSON.parse(ruleData.data.rule));
|
|
116
|
+
prevValue.set(name, rule);
|
|
117
|
+
return prevValue;
|
|
118
|
+
}, new Map());
|
|
119
|
+
}
|
|
120
|
+
getRbacAssignments({ assignments }) {
|
|
121
|
+
return Object.keys(assignments).reduce((prevValue, username) => {
|
|
122
|
+
const _assignments = assignments[username];
|
|
123
|
+
_assignments.forEach((itemName) => {
|
|
84
124
|
var _a;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
var _a;
|
|
95
|
-
if (prevValue.has(username)) {
|
|
96
|
-
(_a = prevValue.get(username)) === null || _a === void 0 ? void 0 : _a.set(itemName, new rbac_1.Assignment({
|
|
125
|
+
if (prevValue.has(username)) {
|
|
126
|
+
(_a = prevValue.get(username)) === null || _a === void 0 ? void 0 : _a.set(itemName, new rbac_1.Assignment({
|
|
127
|
+
itemName,
|
|
128
|
+
username,
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
prevValue.set(username, new Map([
|
|
133
|
+
[
|
|
97
134
|
itemName,
|
|
98
|
-
|
|
99
|
-
}));
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
prevValue.set(username, new Map([
|
|
103
|
-
[
|
|
135
|
+
new rbac_1.Assignment({
|
|
104
136
|
itemName,
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return prevValue;
|
|
114
|
-
}, new Map());
|
|
115
|
-
});
|
|
137
|
+
username,
|
|
138
|
+
}),
|
|
139
|
+
],
|
|
140
|
+
]));
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
return prevValue;
|
|
144
|
+
}, new Map());
|
|
116
145
|
}
|
|
117
146
|
}
|
|
118
147
|
exports.default = RbacCheckAccess;
|
|
148
|
+
//# sourceMappingURL=RbacCheckAccess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RbacCheckAccess.js","sourceRoot":"","sources":["../src/RbacCheckAccess.ts"],"names":[],"mappings":"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"}
|
package/build/RbacContext.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RbacContext.d.ts","sourceRoot":"","sources":["../src/RbacContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG1D,oBAAY,kBAAkB,GAAG,MAAM,UAAU,CAAC;AAClD,oBAAY,aAAa,GAAG,MAAM,OAAO,CAAC;AAC1C,oBAAY,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,GAAG,kBAAkB,CAAC;IACzC,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,oBAAY,gBAAgB,GAAG;IAC7B,WAAW,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE,CAAC;AAEF,QAAA,MAAM,WAAW,iCAEf,CAAC;AAEH,oBAAY,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA4EpD,CAAC;AAEF,eAAO,MAAM,YAAY,kCAAuB,CAAC;AACjD,eAAe,WAAW,CAAC"}
|
package/build/RbacContext.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RbacContext.js","sourceRoot":"","sources":["../src/RbacContext.tsx"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -2,3 +2,4 @@ export { default as RbacContext, RbacConsumer, RbacProvider } from "./RbacContex
|
|
|
2
2
|
export { default as CheckAccess, CheckAccessProps } from "./CheckAccess";
|
|
3
3
|
export { default as NoAccess } from "./NoAccess";
|
|
4
4
|
export { default as useCheckAccess } from "./useCheckAccess";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -14,3 +14,4 @@ var NoAccess_1 = require("./NoAccess");
|
|
|
14
14
|
Object.defineProperty(exports, "NoAccess", { enumerable: true, get: function () { return __importDefault(NoAccess_1).default; } });
|
|
15
15
|
var useCheckAccess_1 = require("./useCheckAccess");
|
|
16
16
|
Object.defineProperty(exports, "useCheckAccess", { enumerable: true, get: function () { return __importDefault(useCheckAccess_1).default; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAmF;AAA1E,2HAAA,OAAO,OAAe;AAAE,2GAAA,YAAY,OAAA;AAAE,2GAAA,YAAY,OAAA;AAC3D,6CAAyE;AAAhE,2HAAA,OAAO,OAAe;AAC/B,uCAAiD;AAAxC,qHAAA,OAAO,OAAY;AAC5B,mDAA6D;AAApD,iIAAA,OAAO,OAAkB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCheckAccess.d.ts","sourceRoot":"","sources":["../src/useCheckAccess.ts"],"names":[],"mappings":"AACA,OAAoB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEhE,oBAAY,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,iBAAS,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,kBAAkB,oBAyC1E;AAED,eAAe,cAAc,CAAC"}
|
package/build/useCheckAccess.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCheckAccess.js","sourceRoot":"","sources":["../src/useCheckAccess.ts"],"names":[],"mappings":";;;;;AAAA,iCAAwD;AACxD,gEAAgE;AAOhE,SAAS,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAsB;IACzE,MAAM,IAAI,GAAG,IAAA,kBAAU,EAAC,qBAAW,CAAC,CAAC;IAErC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAmB;QACnD,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IAEH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,QAAQ,CAAC;YACP,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QAEH,IAAI;aACD,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;aAC5C,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,UAAU,EAAE;gBACd,QAAQ,CAAC;oBACP,QAAQ,EAAE,KAAK;oBACf,SAAS,EAAE,MAAM;iBAClB,CAAC,CAAC;aACJ;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,UAAU,EAAE;gBACd,QAAQ,CAAC;oBACP,QAAQ,EAAE,KAAK;oBACf,SAAS,EAAE,KAAK;iBACjB,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAExC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kBAAe,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iushev/react-rbac",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.19",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Ivaylo Ushev",
|
|
6
6
|
"description": "",
|
|
@@ -24,5 +24,8 @@
|
|
|
24
24
|
},
|
|
25
25
|
"publishConfig": {
|
|
26
26
|
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"http-status-codes": "^2.2.0"
|
|
27
30
|
}
|
|
28
31
|
}
|
package/src/RbacCheckAccess.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import axios, { AxiosInstance } from "axios";
|
|
2
|
+
import statusCodes from "http-status-codes";
|
|
3
|
+
|
|
1
4
|
import {
|
|
2
5
|
Assignment,
|
|
3
6
|
BaseCheckAccess,
|
|
@@ -11,8 +14,6 @@ import {
|
|
|
11
14
|
RuleParams,
|
|
12
15
|
} from "@iushev/rbac";
|
|
13
16
|
|
|
14
|
-
import axios, { AxiosInstance } from "axios";
|
|
15
|
-
|
|
16
17
|
export type RbacCheckAccessOptions = BaseCheckAccessOptions & {
|
|
17
18
|
path: string;
|
|
18
19
|
authorization: () => string;
|
|
@@ -54,12 +55,32 @@ export default class RbacCheckAccess extends BaseCheckAccess {
|
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
public async load(): Promise<void> {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
let _rbac: RBACResponse;
|
|
59
|
+
try {
|
|
60
|
+
console.log("Load RBAC");
|
|
61
|
+
const response = await this.axiosInstance.get<RBACResponse>("/rbac");
|
|
62
|
+
_rbac = response.data;
|
|
63
|
+
} catch (err) {
|
|
64
|
+
if (axios.isAxiosError(err) && err.response?.status === statusCodes.NOT_FOUND) {
|
|
65
|
+
_rbac = {
|
|
66
|
+
assignments: {},
|
|
67
|
+
items: {},
|
|
68
|
+
rules: {},
|
|
69
|
+
};
|
|
70
|
+
} else {
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
60
74
|
|
|
61
|
-
this.items =
|
|
62
|
-
|
|
75
|
+
this.items = this.getRbacItems(_rbac);
|
|
76
|
+
this.parents = this.getRbacParents(_rbac);
|
|
77
|
+
this.rules = this.getRbacRules(_rbac);
|
|
78
|
+
this.assignments = this.getRbacAssignments(_rbac);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
private getRbacItems({ items }: RBACResponse) {
|
|
82
|
+
return Object.keys(items).reduce<Map<string, Item>>((prevValue, name) => {
|
|
83
|
+
const item = items[name];
|
|
63
84
|
const ItemClass = item.type === ItemType.permission ? Permission : Role;
|
|
64
85
|
prevValue.set(
|
|
65
86
|
name,
|
|
@@ -72,9 +93,11 @@ export default class RbacCheckAccess extends BaseCheckAccess {
|
|
|
72
93
|
);
|
|
73
94
|
return prevValue;
|
|
74
95
|
}, new Map());
|
|
96
|
+
}
|
|
75
97
|
|
|
76
|
-
|
|
77
|
-
|
|
98
|
+
private getRbacParents({ items }: RBACResponse) {
|
|
99
|
+
return Object.keys(items).reduce<Map<string, Map<string, Item>>>((prevValue, name) => {
|
|
100
|
+
const item = items[name];
|
|
78
101
|
if (!item.children || item.children.length === 0) {
|
|
79
102
|
return prevValue;
|
|
80
103
|
}
|
|
@@ -92,45 +115,46 @@ export default class RbacCheckAccess extends BaseCheckAccess {
|
|
|
92
115
|
|
|
93
116
|
return prevValue;
|
|
94
117
|
}, new Map());
|
|
118
|
+
}
|
|
95
119
|
|
|
96
|
-
|
|
97
|
-
|
|
120
|
+
private getRbacRules({ rules }: RBACResponse) {
|
|
121
|
+
return Object.keys(rules).reduce<Map<string, Rule>>((prevValue, name) => {
|
|
122
|
+
const ruleData = rules[name];
|
|
98
123
|
const RuleClass = this.ruleClasses.get(ruleData.data.typeName) ?? Rule;
|
|
99
124
|
const rule = new RuleClass(name, JSON.parse(ruleData.data.rule));
|
|
100
125
|
prevValue.set(name, rule);
|
|
101
126
|
return prevValue;
|
|
102
127
|
}, new Map());
|
|
128
|
+
}
|
|
103
129
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
130
|
+
private getRbacAssignments({ assignments }: RBACResponse) {
|
|
131
|
+
return Object.keys(assignments).reduce<Map<string, Map<string, Assignment>>>((prevValue, username) => {
|
|
132
|
+
const _assignments = assignments[username];
|
|
133
|
+
_assignments.forEach((itemName) => {
|
|
134
|
+
if (prevValue.has(username)) {
|
|
135
|
+
prevValue.get(username)?.set(
|
|
136
|
+
itemName,
|
|
137
|
+
new Assignment({
|
|
110
138
|
itemName,
|
|
111
|
-
new Assignment({
|
|
112
|
-
itemName,
|
|
113
|
-
username,
|
|
114
|
-
})
|
|
115
|
-
);
|
|
116
|
-
} else {
|
|
117
|
-
prevValue.set(
|
|
118
139
|
username,
|
|
119
|
-
|
|
120
|
-
|
|
140
|
+
})
|
|
141
|
+
);
|
|
142
|
+
} else {
|
|
143
|
+
prevValue.set(
|
|
144
|
+
username,
|
|
145
|
+
new Map([
|
|
146
|
+
[
|
|
147
|
+
itemName,
|
|
148
|
+
new Assignment({
|
|
121
149
|
itemName,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return prevValue;
|
|
132
|
-
},
|
|
133
|
-
new Map()
|
|
134
|
-
);
|
|
150
|
+
username,
|
|
151
|
+
}),
|
|
152
|
+
],
|
|
153
|
+
])
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
return prevValue;
|
|
158
|
+
}, new Map());
|
|
135
159
|
}
|
|
136
160
|
}
|
package/src/useCheckAccess.ts
CHANGED
package/tsconfig.json
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
// "checkJs": true, /* Report errors in .js files. */
|
|
12
12
|
"jsx": "react-jsx", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
|
|
13
13
|
"declaration": true, /* Generates corresponding '.d.ts' file. */
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
"declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
|
15
|
+
"sourceMap": true, /* Generates corresponding '.map' file. */
|
|
16
16
|
// "outFile": "./", /* Concatenate and emit output to single file. */
|
|
17
17
|
"outDir": "./build" /* Redirect output structure to the directory. */,
|
|
18
18
|
// "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
|
|
@@ -68,5 +68,6 @@
|
|
|
68
68
|
"skipLibCheck": true /* Skip type checking of declaration files. */,
|
|
69
69
|
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
|
|
70
70
|
},
|
|
71
|
+
"include": ["src/**/*"],
|
|
71
72
|
"exclude": ["build", "node_modules"],
|
|
72
73
|
}
|