@iushev/react-rbac 1.0.38 → 1.0.39

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.
@@ -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
@@ -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,iCAGf,CAAC;AAEH,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,CA6EpD,CAAC;AAEF,eAAO,MAAM,YAAY,kCAAuB,CAAC;AAEjD,eAAO,MAAM,OAAO,QAAO,gBAM1B,CAAC;AAEF,eAAe,WAAW,CAAC"}
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"}
@@ -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.useRbac = exports.RbacConsumer = exports.RbacProvider = void 0;
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
- rbac: null,
54
- checkAccess: () => __awaiter(void 0, void 0, void 0, function* () { return true; }),
55
- });
56
- const RbacProvider = ({ username, rbacUrl, token, isSuperuser, isGuest, ruleClasses: _ruleClasses, children, }) => {
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
- if (!token) {
60
- setRbac(null);
61
- }
62
- else {
63
- const _rbac = new RbacCheckAccess_1.default({
64
- path: rbacUrl,
65
- authorization: () => {
66
- return token;
67
- },
68
- });
69
- _rbac.load().then(() => setRbac(_rbac));
70
- }
71
- }, [rbacUrl, token]);
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.38",
3
+ "version": "1.0.39",
4
4
  "private": false,
5
5
  "author": "Ivaylo Ushev",
6
6
  "description": "",
@@ -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
- rbac: null,
22
- checkAccess: async () => true,
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: _ruleClasses,
46
+ ruleClasses,
42
47
  children,
43
48
  }) => {
44
49
  const [rbac, setRbac] = useState<RbacCheckAccess | null>(null);
45
50
 
46
51
  useEffect(() => {
47
- if (!token) {
48
- setRbac(null);
49
- } else {
50
- const _rbac = new RbacCheckAccess({
51
- path: rbacUrl,
52
- authorization: () => {
53
- return token;
54
- },
55
- });
56
- _rbac.load().then(() => setRbac(_rbac));
57
- }
58
- }, [rbacUrl, token]);
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;