@iushev/react-rbac 1.0.38 → 1.0.40
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.js +1 -1
- package/lib/RbacContext.d.ts +3 -3
- package/lib/RbacContext.d.ts.map +1 -1
- package/lib/RbacContext.js +31 -27
- package/package.json +2 -2
- package/src/RbacCheckAccess.ts +1 -1
- package/src/RbacContext.tsx +30 -25
package/lib/RbacCheckAccess.js
CHANGED
|
@@ -113,7 +113,7 @@ class RbacCheckAccess extends rbac_1.BaseCheckAccess {
|
|
|
113
113
|
var _a;
|
|
114
114
|
const ruleData = rules[name];
|
|
115
115
|
const RuleClass = (_a = this.ruleClasses.get(ruleData.data.typeName)) !== null && _a !== void 0 ? _a : rbac_1.Rule;
|
|
116
|
-
const rule = new RuleClass(name, JSON.parse(ruleData.data.
|
|
116
|
+
const rule = new RuleClass(name, JSON.parse(ruleData.data.ruleData));
|
|
117
117
|
prevValue.set(name, rule);
|
|
118
118
|
return prevValue;
|
|
119
119
|
}, new Map());
|
package/lib/RbacContext.d.ts
CHANGED
|
@@ -13,7 +13,8 @@ export type RbacContextProps = {
|
|
|
13
13
|
rbac: RbacCheckAccess | null;
|
|
14
14
|
checkAccess: (options: CheckAccessOptions) => Promise<boolean>;
|
|
15
15
|
};
|
|
16
|
-
declare const RbacContext: React.Context<RbacContextProps>;
|
|
16
|
+
declare const RbacContext: React.Context<RbacContextProps | null>;
|
|
17
|
+
export declare const useRbac: () => RbacContextProps;
|
|
17
18
|
export type RbacProviderProps = {
|
|
18
19
|
username: string;
|
|
19
20
|
rbacUrl: string;
|
|
@@ -24,7 +25,6 @@ export type RbacProviderProps = {
|
|
|
24
25
|
children: React.ReactNode;
|
|
25
26
|
};
|
|
26
27
|
export declare const RbacProvider: React.FC<RbacProviderProps>;
|
|
27
|
-
export declare const RbacConsumer: React.Consumer<RbacContextProps>;
|
|
28
|
-
export declare const useRbac: () => RbacContextProps;
|
|
28
|
+
export declare const RbacConsumer: React.Consumer<RbacContextProps | null>;
|
|
29
29
|
export default RbacContext;
|
|
30
30
|
//# sourceMappingURL=RbacContext.d.ts.map
|
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;AAC1D,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG,MAAM,UAAU,CAAC;AAClD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC;AAC1C,MAAM,MAAM,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,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE,CAAC;AAEF,QAAA,MAAM,WAAW,
|
|
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;AAC1D,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG,MAAM,UAAU,CAAC;AAClD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC;AAC1C,MAAM,MAAM,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,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE,CAAC;AAEF,QAAA,MAAM,WAAW,wCAAqD,CAAC;AAEvE,eAAO,MAAM,OAAO,QAAO,gBAM1B,CAAC;AAEF,MAAM,MAAM,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;IACzC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAqFpD,CAAC;AAEF,eAAO,MAAM,YAAY,yCAAuB,CAAC;AAEjD,eAAe,WAAW,CAAC"}
|
package/lib/RbacContext.js
CHANGED
|
@@ -45,30 +45,42 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
45
45
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
46
|
};
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
-
exports.
|
|
48
|
+
exports.RbacConsumer = exports.RbacProvider = exports.useRbac = void 0;
|
|
49
49
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
50
50
|
const react_1 = __importStar(require("react"));
|
|
51
51
|
const RbacCheckAccess_1 = __importDefault(require("./RbacCheckAccess"));
|
|
52
|
-
const RbacContext = react_1.default.createContext(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
const RbacContext = react_1.default.createContext(null);
|
|
53
|
+
const useRbac = () => {
|
|
54
|
+
const ctx = (0, react_1.useContext)(RbacContext);
|
|
55
|
+
if (!ctx) {
|
|
56
|
+
throw new Error("useRbac must be rendered under RbacProvider");
|
|
57
|
+
}
|
|
58
|
+
return ctx;
|
|
59
|
+
};
|
|
60
|
+
exports.useRbac = useRbac;
|
|
61
|
+
const RbacProvider = ({ username, rbacUrl, token, isSuperuser, isGuest, ruleClasses, children, }) => {
|
|
57
62
|
const [rbac, setRbac] = (0, react_1.useState)(null);
|
|
58
63
|
(0, react_1.useEffect)(() => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
64
|
+
const initRbac = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
65
|
+
if (!token) {
|
|
66
|
+
setRbac(null);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const _rbac = new RbacCheckAccess_1.default({
|
|
70
|
+
path: rbacUrl,
|
|
71
|
+
authorization: () => {
|
|
72
|
+
return token;
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
ruleClasses.forEach((RuleClass, ruleName) => {
|
|
76
|
+
_rbac.ruleClasses.set(ruleName, RuleClass);
|
|
77
|
+
});
|
|
78
|
+
yield _rbac.load();
|
|
79
|
+
setRbac(_rbac);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
initRbac();
|
|
83
|
+
}, [rbacUrl, token, ruleClasses]);
|
|
72
84
|
const matchRole = (0, react_1.useCallback)((roles, params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
73
85
|
if (!roles || roles.length === 0) {
|
|
74
86
|
return true;
|
|
@@ -114,12 +126,4 @@ const RbacProvider = ({ username, rbacUrl, token, isSuperuser, isGuest, ruleClas
|
|
|
114
126
|
};
|
|
115
127
|
exports.RbacProvider = RbacProvider;
|
|
116
128
|
exports.RbacConsumer = RbacContext.Consumer;
|
|
117
|
-
const useRbac = () => {
|
|
118
|
-
const ctx = (0, react_1.useContext)(RbacContext);
|
|
119
|
-
if (!ctx) {
|
|
120
|
-
throw new Error("useRbac must be rendered under RbacProvider");
|
|
121
|
-
}
|
|
122
|
-
return ctx;
|
|
123
|
-
};
|
|
124
|
-
exports.useRbac = useRbac;
|
|
125
129
|
exports.default = RbacContext;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iushev/react-rbac",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.40",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Ivaylo Ushev",
|
|
6
6
|
"description": "",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"typescript": "^5.7.2"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@iushev/rbac": "^1.0.
|
|
40
|
+
"@iushev/rbac": "^1.0.50",
|
|
41
41
|
"axios": "^1.7.9",
|
|
42
42
|
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
43
43
|
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
package/src/RbacCheckAccess.ts
CHANGED
|
@@ -122,7 +122,7 @@ export default class RbacCheckAccess extends BaseCheckAccess {
|
|
|
122
122
|
return Object.keys(rules).reduce<Map<string, Rule>>((prevValue, name) => {
|
|
123
123
|
const ruleData = rules[name];
|
|
124
124
|
const RuleClass = this.ruleClasses.get(ruleData.data.typeName) ?? Rule;
|
|
125
|
-
const rule = new RuleClass(name, JSON.parse(ruleData.data.
|
|
125
|
+
const rule = new RuleClass(name, JSON.parse(ruleData.data.ruleData));
|
|
126
126
|
prevValue.set(name, rule);
|
|
127
127
|
return prevValue;
|
|
128
128
|
}, new Map());
|
package/src/RbacContext.tsx
CHANGED
|
@@ -17,10 +17,15 @@ export type RbacContextProps = {
|
|
|
17
17
|
checkAccess: (options: CheckAccessOptions) => Promise<boolean>;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
const RbacContext = React.createContext<RbacContextProps>(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
const RbacContext = React.createContext<RbacContextProps | null>(null);
|
|
21
|
+
|
|
22
|
+
export const useRbac = (): RbacContextProps => {
|
|
23
|
+
const ctx = useContext(RbacContext);
|
|
24
|
+
if (!ctx) {
|
|
25
|
+
throw new Error("useRbac must be rendered under RbacProvider");
|
|
26
|
+
}
|
|
27
|
+
return ctx;
|
|
28
|
+
};
|
|
24
29
|
|
|
25
30
|
export type RbacProviderProps = {
|
|
26
31
|
username: string;
|
|
@@ -38,24 +43,32 @@ export const RbacProvider: React.FC<RbacProviderProps> = ({
|
|
|
38
43
|
token,
|
|
39
44
|
isSuperuser,
|
|
40
45
|
isGuest,
|
|
41
|
-
ruleClasses
|
|
46
|
+
ruleClasses,
|
|
42
47
|
children,
|
|
43
48
|
}) => {
|
|
44
49
|
const [rbac, setRbac] = useState<RbacCheckAccess | null>(null);
|
|
45
50
|
|
|
46
51
|
useEffect(() => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
const initRbac = async () => {
|
|
53
|
+
if (!token) {
|
|
54
|
+
setRbac(null);
|
|
55
|
+
} else {
|
|
56
|
+
const _rbac = new RbacCheckAccess({
|
|
57
|
+
path: rbacUrl,
|
|
58
|
+
authorization: () => {
|
|
59
|
+
return token;
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
ruleClasses.forEach((RuleClass, ruleName) => {
|
|
63
|
+
_rbac.ruleClasses.set(ruleName, RuleClass);
|
|
64
|
+
});
|
|
65
|
+
await _rbac.load();
|
|
66
|
+
setRbac(_rbac);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
initRbac();
|
|
71
|
+
}, [rbacUrl, token, ruleClasses]);
|
|
59
72
|
|
|
60
73
|
const matchRole = useCallback(
|
|
61
74
|
async (roles: string[], params: RuleParams | RuleParamsFunction) => {
|
|
@@ -113,12 +126,4 @@ export const RbacProvider: React.FC<RbacProviderProps> = ({
|
|
|
113
126
|
|
|
114
127
|
export const RbacConsumer = RbacContext.Consumer;
|
|
115
128
|
|
|
116
|
-
export const useRbac = (): RbacContextProps => {
|
|
117
|
-
const ctx = useContext(RbacContext);
|
|
118
|
-
if (!ctx) {
|
|
119
|
-
throw new Error("useRbac must be rendered under RbacProvider");
|
|
120
|
-
}
|
|
121
|
-
return ctx;
|
|
122
|
-
};
|
|
123
|
-
|
|
124
129
|
export default RbacContext;
|