@iushev/react-rbac 1.0.21 → 1.0.22
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/RbacContext.d.ts.map +1 -1
- package/lib/RbacContext.js +7 -4
- package/package.json +3 -1
- package/src/NoAccess.tsx +1 -1
- package/src/RbacContext.tsx +33 -23
- package/src/index.ts +1 -1
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iushev/react-rbac",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.22",
|
|
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/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
1
|
export { default as RbacContext, RbacConsumer, RbacProvider } 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";
|