@iushev/react-rbac 1.0.21 → 1.0.24
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/lib/RbacCheckAccess.d.ts +1 -0
- package/lib/RbacCheckAccess.d.ts.map +1 -1
- package/lib/RbacCheckAccess.js +9 -0
- package/lib/RbacContext.d.ts.map +1 -1
- package/lib/RbacContext.js +7 -4
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/package.json +3 -1
- package/src/NoAccess.tsx +1 -1
- package/src/RbacCheckAccess.ts +8 -0
- package/src/RbacContext.tsx +33 -23
- package/src/index.ts +2 -2
package/lib/RbacCheckAccess.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export default class RbacCheckAccess extends BaseCheckAccess {
|
|
|
8
8
|
protected assignments: Map<string, Map<string, Assignment>>;
|
|
9
9
|
constructor(options: RbacCheckAccessOptions);
|
|
10
10
|
checkAccess(username: string, itemName: string, params: RuleParams): Promise<boolean>;
|
|
11
|
+
getAssignmentsByUser(username: string): Promise<Map<string, Assignment>>;
|
|
11
12
|
load(): Promise<void>;
|
|
12
13
|
private getRbacItems;
|
|
13
14
|
private getRbacParents;
|
|
@@ -1 +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;IAgBpB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,kBAAkB;CAa3B"}
|
|
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,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAQxE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBlC,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,kBAAkB;CAa3B"}
|
package/lib/RbacCheckAccess.js
CHANGED
|
@@ -48,6 +48,15 @@ class RbacCheckAccess extends rbac_1.BaseCheckAccess {
|
|
|
48
48
|
return _super.checkAccess.call(this, username, itemName, params, (_a = this.assignments.get(username)) !== null && _a !== void 0 ? _a : new Map());
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
+
getAssignmentsByUser(username) {
|
|
52
|
+
var _a;
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
if (this.items.size === 0) {
|
|
55
|
+
yield this.load();
|
|
56
|
+
}
|
|
57
|
+
return (_a = this.assignments.get(username)) !== null && _a !== void 0 ? _a : new Map();
|
|
58
|
+
});
|
|
59
|
+
}
|
|
51
60
|
load() {
|
|
52
61
|
var _a;
|
|
53
62
|
return __awaiter(this, void 0, void 0, function* () {
|
package/lib/RbacContext.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RbacContext.d.ts","sourceRoot":"","sources":["../src/RbacContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgE,MAAM,OAAO,CAAC;AAErF,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,
|
|
1
|
+
{"version":3,"file":"RbacContext.d.ts","sourceRoot":"","sources":["../src/RbacContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgE,MAAM,OAAO,CAAC;AAErF,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;AAEjD,eAAO,MAAM,OAAO,QAAO,gBAM1B,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
package/lib/RbacContext.js
CHANGED
|
@@ -62,6 +62,9 @@ const RbacProvider = ({ username, rbacUrl, token, isSuperuser, isGuest, ruleClas
|
|
|
62
62
|
if (!roles || roles.length === 0) {
|
|
63
63
|
return true;
|
|
64
64
|
}
|
|
65
|
+
if (!rbac) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
65
68
|
for (const role of roles) {
|
|
66
69
|
if (role === "?" && isGuest) {
|
|
67
70
|
// only guest users
|
|
@@ -71,7 +74,7 @@ const RbacProvider = ({ username, rbacUrl, token, isSuperuser, isGuest, ruleClas
|
|
|
71
74
|
// only authenticated users
|
|
72
75
|
return true;
|
|
73
76
|
}
|
|
74
|
-
else if (yield
|
|
77
|
+
else if (yield rbac.checkAccess(username, role, typeof params === "function" ? params() : params)) {
|
|
75
78
|
// only authenticated users that has permission
|
|
76
79
|
return true;
|
|
77
80
|
}
|
|
@@ -80,7 +83,7 @@ const RbacProvider = ({ username, rbacUrl, token, isSuperuser, isGuest, ruleClas
|
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
85
|
return false;
|
|
83
|
-
}), []);
|
|
86
|
+
}), [isGuest, rbac, username]);
|
|
84
87
|
const matchCustom = (0, react_1.useCallback)((match) => {
|
|
85
88
|
if (!match) {
|
|
86
89
|
return true;
|
|
@@ -89,12 +92,12 @@ const RbacProvider = ({ username, rbacUrl, token, isSuperuser, isGuest, ruleClas
|
|
|
89
92
|
}, []);
|
|
90
93
|
const checkAccess = (0, react_1.useCallback)(({ roles, allow = true, match, params = {} }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
91
94
|
return isSuperuser || ((yield matchRole(roles, params)) && matchCustom(match) && allow);
|
|
92
|
-
}), []);
|
|
95
|
+
}), [isSuperuser, matchCustom, matchRole]);
|
|
93
96
|
const value = (0, react_1.useMemo)(() => {
|
|
94
97
|
return {
|
|
95
98
|
checkAccess,
|
|
96
99
|
};
|
|
97
|
-
}, [
|
|
100
|
+
}, [checkAccess]);
|
|
98
101
|
return (0, jsx_runtime_1.jsx)(RbacContext.Provider, Object.assign({ value: value }, { children: children }));
|
|
99
102
|
};
|
|
100
103
|
exports.RbacProvider = RbacProvider;
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { default as RbacContext, RbacConsumer, RbacProvider } from "./RbacContext";
|
|
1
|
+
export { default as RbacContext, RbacConsumer, RbacProvider, useRbac } from "./RbacContext";
|
|
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";
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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,OAAO,EAAE,MAAM,eAAe,CAAC;AAC5F,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/lib/index.js
CHANGED
|
@@ -3,11 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.useCheckAccess = exports.NoAccess = exports.CheckAccess = exports.RbacProvider = exports.RbacConsumer = exports.RbacContext = void 0;
|
|
6
|
+
exports.useCheckAccess = exports.NoAccess = exports.CheckAccess = exports.useRbac = exports.RbacProvider = exports.RbacConsumer = exports.RbacContext = void 0;
|
|
7
7
|
var RbacContext_1 = require("./RbacContext");
|
|
8
8
|
Object.defineProperty(exports, "RbacContext", { enumerable: true, get: function () { return __importDefault(RbacContext_1).default; } });
|
|
9
9
|
Object.defineProperty(exports, "RbacConsumer", { enumerable: true, get: function () { return RbacContext_1.RbacConsumer; } });
|
|
10
10
|
Object.defineProperty(exports, "RbacProvider", { enumerable: true, get: function () { return RbacContext_1.RbacProvider; } });
|
|
11
|
+
Object.defineProperty(exports, "useRbac", { enumerable: true, get: function () { return RbacContext_1.useRbac; } });
|
|
11
12
|
var CheckAccess_1 = require("./CheckAccess");
|
|
12
13
|
Object.defineProperty(exports, "CheckAccess", { enumerable: true, get: function () { return __importDefault(CheckAccess_1).default; } });
|
|
13
14
|
var NoAccess_1 = require("./NoAccess");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iushev/react-rbac",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.24",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Ivaylo Ushev",
|
|
6
6
|
"description": "",
|
|
@@ -28,6 +28,8 @@
|
|
|
28
28
|
"eslint": "^8.14.0",
|
|
29
29
|
"eslint-config-prettier": "^8.5.0",
|
|
30
30
|
"eslint-plugin-prettier": "^4.0.0",
|
|
31
|
+
"eslint-plugin-react": "^7.29.4",
|
|
32
|
+
"eslint-plugin-react-hooks": "^4.5.0",
|
|
31
33
|
"jest": "^27.5.1",
|
|
32
34
|
"prettier": "^2.6.2",
|
|
33
35
|
"rimraf": "^3.0.2",
|
package/src/NoAccess.tsx
CHANGED
package/src/RbacCheckAccess.ts
CHANGED
|
@@ -54,6 +54,14 @@ export default class RbacCheckAccess extends BaseCheckAccess {
|
|
|
54
54
|
return super.checkAccess(username, itemName, params, this.assignments.get(username) ?? new Map());
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
public async getAssignmentsByUser(username: string): Promise<Map<string, Assignment>> {
|
|
58
|
+
if (this.items.size === 0) {
|
|
59
|
+
await this.load();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return this.assignments.get(username) ?? new Map();
|
|
63
|
+
}
|
|
64
|
+
|
|
57
65
|
public async load(): Promise<void> {
|
|
58
66
|
let _rbac: RBACResponse;
|
|
59
67
|
try {
|
package/src/RbacContext.tsx
CHANGED
|
@@ -54,28 +54,35 @@ export const RbacProvider: React.FC<RbacProviderProps> = ({
|
|
|
54
54
|
}
|
|
55
55
|
}, [rbacUrl, token]);
|
|
56
56
|
|
|
57
|
-
const matchRole = useCallback(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
for (const role of roles) {
|
|
63
|
-
if (role === "?" && isGuest) {
|
|
64
|
-
// only guest users
|
|
57
|
+
const matchRole = useCallback(
|
|
58
|
+
async (roles, params) => {
|
|
59
|
+
if (!roles || roles.length === 0) {
|
|
65
60
|
return true;
|
|
66
|
-
} else if (role === "@" && !isGuest) {
|
|
67
|
-
// only authenticated users
|
|
68
|
-
return true;
|
|
69
|
-
} else if (await rbac?.checkAccess(username, role, typeof params === "function" ? params() : params)) {
|
|
70
|
-
// only authenticated users that has permission
|
|
71
|
-
return true;
|
|
72
|
-
} else {
|
|
73
|
-
continue;
|
|
74
61
|
}
|
|
75
|
-
}
|
|
76
62
|
|
|
77
|
-
|
|
78
|
-
|
|
63
|
+
if (!rbac) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
for (const role of roles) {
|
|
68
|
+
if (role === "?" && isGuest) {
|
|
69
|
+
// only guest users
|
|
70
|
+
return true;
|
|
71
|
+
} else if (role === "@" && !isGuest) {
|
|
72
|
+
// only authenticated users
|
|
73
|
+
return true;
|
|
74
|
+
} else if (await rbac.checkAccess(username, role, typeof params === "function" ? params() : params)) {
|
|
75
|
+
// only authenticated users that has permission
|
|
76
|
+
return true;
|
|
77
|
+
} else {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return false;
|
|
83
|
+
},
|
|
84
|
+
[isGuest, rbac, username]
|
|
85
|
+
);
|
|
79
86
|
|
|
80
87
|
const matchCustom = useCallback((match) => {
|
|
81
88
|
if (!match) {
|
|
@@ -84,15 +91,18 @@ export const RbacProvider: React.FC<RbacProviderProps> = ({
|
|
|
84
91
|
return match();
|
|
85
92
|
}, []);
|
|
86
93
|
|
|
87
|
-
const checkAccess = useCallback(
|
|
88
|
-
|
|
89
|
-
|
|
94
|
+
const checkAccess = useCallback(
|
|
95
|
+
async ({ roles, allow = true, match, params = {} }: CheckAccessOptions) => {
|
|
96
|
+
return isSuperuser || ((await matchRole(roles, params)) && matchCustom(match) && allow);
|
|
97
|
+
},
|
|
98
|
+
[isSuperuser, matchCustom, matchRole]
|
|
99
|
+
);
|
|
90
100
|
|
|
91
101
|
const value = useMemo(() => {
|
|
92
102
|
return {
|
|
93
103
|
checkAccess,
|
|
94
104
|
};
|
|
95
|
-
}, [
|
|
105
|
+
}, [checkAccess]);
|
|
96
106
|
|
|
97
107
|
return <RbacContext.Provider value={value}>{children}</RbacContext.Provider>;
|
|
98
108
|
};
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { default as RbacContext, RbacConsumer, RbacProvider } from "./RbacContext";
|
|
1
|
+
export { default as RbacContext, RbacConsumer, RbacProvider, useRbac } from "./RbacContext";
|
|
2
2
|
export { default as CheckAccess, CheckAccessProps } from "./CheckAccess";
|
|
3
3
|
export { default as NoAccess } from "./NoAccess";
|
|
4
|
-
export { default as useCheckAccess } from "./useCheckAccess";
|
|
4
|
+
export { default as useCheckAccess } from "./useCheckAccess";
|