@redhat-cloud-services/frontend-components-utilities 3.6.0 → 3.7.0
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/RBAC/RBAC.d.ts +3 -3
- package/RBAC/RBAC.js +58 -20
- package/RBAC/RBAC.js.map +1 -1
- package/RBACHook/RBACHook.d.ts +4 -3
- package/RBACHook/RBACHook.js +5 -2
- package/RBACHook/RBACHook.js.map +1 -1
- package/README.md +1 -0
- package/esm/RBAC/RBAC.js +58 -20
- package/esm/RBAC/RBAC.js.map +1 -1
- package/esm/RBACHook/RBACHook.js +5 -2
- package/esm/RBACHook/RBACHook.js.map +1 -1
- package/package.json +1 -1
package/RBAC/RBAC.d.ts
CHANGED
|
@@ -13,8 +13,8 @@ export interface RBAC {
|
|
|
13
13
|
permissions: Access[];
|
|
14
14
|
}
|
|
15
15
|
export declare function getRBAC(applicationName?: string, disableCache?: boolean): Promise<RBAC>;
|
|
16
|
-
export declare function doesHavePermissions(userPermissions: (Access | string)[], permissionList: (Access | string)[]): boolean;
|
|
17
|
-
export declare function hasAllPermissions(userPermissions: (Access | string)[], permissionList: (Access | string)[]): boolean;
|
|
16
|
+
export declare function doesHavePermissions(userPermissions: (Access | string)[], permissionList: (Access | string)[], checkResourceDefinitions: boolean): boolean;
|
|
17
|
+
export declare function hasAllPermissions(userPermissions: (Access | string)[], permissionList: (Access | string)[], checkResourceDefinitions: boolean): boolean;
|
|
18
18
|
export interface UsePermissionsState extends RBAC {
|
|
19
19
|
isLoading: boolean;
|
|
20
20
|
hasAccess?: boolean;
|
|
@@ -23,7 +23,7 @@ export interface UsePermissionsContextState {
|
|
|
23
23
|
isLoading?: boolean;
|
|
24
24
|
isOrgAdmin: boolean;
|
|
25
25
|
permissions: (string | Access)[];
|
|
26
|
-
hasAccess?: (requiredPermissions: string[], checkAll?: boolean) => boolean;
|
|
26
|
+
hasAccess?: (requiredPermissions: (Access | string)[], checkAll?: boolean) => boolean;
|
|
27
27
|
}
|
|
28
28
|
export declare const initialPermissions: UsePermissionsContextState;
|
|
29
29
|
export declare const RBACContext: import("react").Context<UsePermissionsContextState>;
|
package/RBAC/RBAC.js
CHANGED
|
@@ -35,9 +35,19 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
39
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
40
|
+
if (ar || !(i in from)) {
|
|
41
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
42
|
+
ar[i] = from[i];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
46
|
+
};
|
|
38
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
48
|
exports.RBACContext = exports.initialPermissions = exports.hasAllPermissions = exports.doesHavePermissions = exports.getRBAC = void 0;
|
|
40
49
|
var react_1 = require("react");
|
|
50
|
+
var rbac_client_1 = require("@redhat-cloud-services/rbac-client");
|
|
41
51
|
function getRBAC(applicationName, disableCache) {
|
|
42
52
|
var _a, _b, _c, _d, _e;
|
|
43
53
|
if (applicationName === void 0) { applicationName = ''; }
|
|
@@ -66,34 +76,62 @@ exports.getRBAC = getRBAC;
|
|
|
66
76
|
function isAccessType(permission) {
|
|
67
77
|
return typeof permission === 'object';
|
|
68
78
|
}
|
|
69
|
-
function
|
|
79
|
+
function extractResourceDefinitionValues(rds) {
|
|
80
|
+
return rds.reduce(function (acc, cur) {
|
|
81
|
+
var _a = cur.attributeFilter, key = _a.key, operation = _a.operation, value = _a.value;
|
|
82
|
+
if (operation === rbac_client_1.ResourceDefinitionFilterOperationEnum.In) {
|
|
83
|
+
return __spreadArray(__spreadArray([], acc, true), value.split(',').map(function (value) { return "".concat(key, ":").concat(value); }), true);
|
|
84
|
+
}
|
|
85
|
+
if (operation === rbac_client_1.ResourceDefinitionFilterOperationEnum.Equal) {
|
|
86
|
+
return __spreadArray(__spreadArray([], acc, true), ["".concat(key, ":").concat(value)], false);
|
|
87
|
+
}
|
|
88
|
+
throw new TypeError('Resource definition operation has incorrect format.');
|
|
89
|
+
}, []);
|
|
90
|
+
}
|
|
91
|
+
function verifyResourceDefinitions(userRds, requestedRds) {
|
|
92
|
+
var userValues = extractResourceDefinitionValues(userRds), requestedValues = extractResourceDefinitionValues(requestedRds);
|
|
93
|
+
return requestedValues.every(function (value) { return userValues.includes(value); });
|
|
94
|
+
}
|
|
95
|
+
function checkRequestedPermission(userPermissions, requestedPermission, checkResourceDefinitions) {
|
|
96
|
+
return userPermissions.some(function (userPermission) {
|
|
97
|
+
var requestedPermissionArray = (isAccessType(requestedPermission) ? requestedPermission.permission : requestedPermission).split(':');
|
|
98
|
+
var userPermissionArray = (isAccessType(userPermission) ? userPermission.permission : userPermission).split(':');
|
|
99
|
+
var matchesPermission = userPermissionArray.slice(0).reduce(function (acc, curr, index, array) {
|
|
100
|
+
if (acc === false) {
|
|
101
|
+
array.splice(index);
|
|
102
|
+
return acc;
|
|
103
|
+
}
|
|
104
|
+
return curr === '*' || curr === (requestedPermissionArray === null || requestedPermissionArray === void 0 ? void 0 : requestedPermissionArray[index]);
|
|
105
|
+
}, true);
|
|
106
|
+
if (checkResourceDefinitions === true && matchesPermission === true) {
|
|
107
|
+
if (isAccessType(userPermission)) {
|
|
108
|
+
if (userPermission.resourceDefinitions === undefined || userPermission.resourceDefinitions.length === 0) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
if (!isAccessType(requestedPermission) ||
|
|
112
|
+
userPermission.resourceDefinitions === undefined ||
|
|
113
|
+
requestedPermission.resourceDefinitions.length === 0) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
return verifyResourceDefinitions(userPermission.resourceDefinitions, requestedPermission.resourceDefinitions);
|
|
117
|
+
}
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
return matchesPermission;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function doesHavePermissions(userPermissions, permissionList, checkResourceDefinitions) {
|
|
70
124
|
if (!userPermissions) {
|
|
71
125
|
return false;
|
|
72
126
|
}
|
|
73
|
-
return
|
|
74
|
-
return permissionList.includes(isAccessType(access) ? access === null || access === void 0 ? void 0 : access.permission : access);
|
|
75
|
-
});
|
|
127
|
+
return permissionList.some(function (permission) { return checkRequestedPermission(userPermissions, permission, checkResourceDefinitions); });
|
|
76
128
|
}
|
|
77
129
|
exports.doesHavePermissions = doesHavePermissions;
|
|
78
|
-
function hasAllPermissions(userPermissions, permissionList) {
|
|
130
|
+
function hasAllPermissions(userPermissions, permissionList, checkResourceDefinitions) {
|
|
79
131
|
if (!userPermissions) {
|
|
80
132
|
return false;
|
|
81
133
|
}
|
|
82
|
-
return permissionList.every(function (permission) {
|
|
83
|
-
return userPermissions.some(function (access) {
|
|
84
|
-
var _a;
|
|
85
|
-
var accessArray = ((_a = (isAccessType(access) ? access === null || access === void 0 ? void 0 : access.permission : access)) === null || _a === void 0 ? void 0 : _a.split(':')) || [];
|
|
86
|
-
var permissionArray = permission.split(':');
|
|
87
|
-
var hasAccess = accessArray.slice(0).reduce(function (acc, curr, index, array) {
|
|
88
|
-
if (acc === false) {
|
|
89
|
-
array.splice(index);
|
|
90
|
-
return acc;
|
|
91
|
-
}
|
|
92
|
-
return curr === '*' || curr === (permissionArray === null || permissionArray === void 0 ? void 0 : permissionArray[index]);
|
|
93
|
-
}, true);
|
|
94
|
-
return hasAccess || accessArray.join(':') === permission;
|
|
95
|
-
});
|
|
96
|
-
});
|
|
134
|
+
return permissionList.every(function (permission) { return checkRequestedPermission(userPermissions, permission, checkResourceDefinitions); });
|
|
97
135
|
}
|
|
98
136
|
exports.hasAllPermissions = hasAllPermissions;
|
|
99
137
|
exports.initialPermissions = {
|
package/RBAC/RBAC.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RBAC.js","sourceRoot":"","sources":["../src/RBAC/RBAC.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RBAC.js","sourceRoot":"","sources":["../src/RBAC/RBAC.ts"],"names":[],"mappings":"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"}
|
package/RBACHook/RBACHook.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { UsePermissionsState } from '../RBAC';
|
|
2
|
-
|
|
3
|
-
export declare
|
|
2
|
+
import { Access } from '@redhat-cloud-services/rbac-client';
|
|
3
|
+
export declare function usePermissions(appName: string, permissionsList: (Access | string)[], disableCache?: boolean, checkAll?: boolean, checkResourceDefinitions?: boolean): UsePermissionsState;
|
|
4
|
+
export declare const usePermissionsWithContext: (requiredPermissions: (Access | string)[], checkAll?: boolean) => {
|
|
4
5
|
hasAccess: boolean;
|
|
5
6
|
isLoading?: boolean | undefined;
|
|
6
7
|
isOrgAdmin: boolean;
|
|
7
|
-
permissions: (string |
|
|
8
|
+
permissions: (string | Access)[];
|
|
8
9
|
};
|
|
9
10
|
export default usePermissions;
|
package/RBACHook/RBACHook.js
CHANGED
|
@@ -61,8 +61,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
61
61
|
exports.usePermissionsWithContext = exports.usePermissions = void 0;
|
|
62
62
|
var react_1 = require("react");
|
|
63
63
|
var RBAC_1 = require("../RBAC");
|
|
64
|
-
function usePermissions(appName, permissionsList, disableCache, checkAll) {
|
|
64
|
+
function usePermissions(appName, permissionsList, disableCache, checkAll, checkResourceDefinitions) {
|
|
65
65
|
var _this = this;
|
|
66
|
+
if (checkResourceDefinitions === void 0) { checkResourceDefinitions = false; }
|
|
66
67
|
var _a = (0, react_1.useState)({
|
|
67
68
|
isLoading: true,
|
|
68
69
|
hasAccess: false,
|
|
@@ -84,7 +85,9 @@ function usePermissions(appName, permissionsList, disableCache, checkAll) {
|
|
|
84
85
|
isLoading: false,
|
|
85
86
|
isOrgAdmin: isOrgAdmin,
|
|
86
87
|
permissions: userPermissions,
|
|
87
|
-
hasAccess: checkAll
|
|
88
|
+
hasAccess: checkAll
|
|
89
|
+
? (0, RBAC_1.hasAllPermissions)(userPermissions, permissionsList, checkResourceDefinitions)
|
|
90
|
+
: (0, RBAC_1.doesHavePermissions)(userPermissions, permissionsList, checkResourceDefinitions),
|
|
88
91
|
});
|
|
89
92
|
return [2];
|
|
90
93
|
}
|
package/RBACHook/RBACHook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RBACHook.js","sourceRoot":"","sources":["../src/RBACHook/RBACHook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAwD;AACxD,gCAA4G;
|
|
1
|
+
{"version":3,"file":"RBACHook.js","sourceRoot":"","sources":["../src/RBACHook/RBACHook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAwD;AACxD,gCAA4G;AAG5G,SAAgB,cAAc,CAC5B,OAAe,EACf,eAAoC,EACpC,YAAsB,EACtB,QAAkB,EAClB,wBAAgC;IALlC,iBAmCC;IA9BC,yCAAA,EAAA,gCAAgC;IAE1B,IAAA,KAAgC,IAAA,gBAAQ,EAAsB;QAClE,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,EAAE;KAChB,CAAC,EALK,WAAW,QAAA,EAAE,cAAc,QAKhC,CAAC;IACH,IAAA,iBAAS,EAAC;QACR,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,cAAc,CAAC,UAAC,IAAI,IAAK,OAAA,uBAAM,IAAI,KAAE,SAAS,EAAE,IAAI,IAAG,EAA9B,CAA8B,CAAC,CAAC;QACzD,CAAC;;;;4BACsD,WAAM,IAAA,cAAO,EAAC,OAAO,EAAE,YAAY,CAAC,EAAA;;wBAAnF,KAA+C,SAAoC,EAAjF,UAAU,gBAAA,EAAe,eAAe,iBAAA;wBAChD,CAAC,MAAM;4BACL,cAAc,CAAC;gCACb,SAAS,EAAE,KAAK;gCAChB,UAAU,YAAA;gCACV,WAAW,EAAE,eAAe;gCAC5B,SAAS,EAAE,QAAQ;oCACjB,CAAC,CAAC,IAAA,wBAAiB,EAAC,eAAe,EAAE,eAAe,EAAE,wBAAwB,CAAC;oCAC/E,CAAC,CAAC,IAAA,0BAAmB,EAAC,eAAe,EAAE,eAAe,EAAE,wBAAwB,CAAC;6BACpF,CAAC,CAAC;;;;aACN,CAAC,EAAE,CAAC;QAEL,OAAO;YACL,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAnCD,wCAmCC;AAEM,IAAM,yBAAyB,GAAG,UAAC,mBAAwC,EAAE,QAAkB;IACpG,IAAM,KAAoC,IAAA,kBAAU,EAAC,kBAAW,CAAC,EAAzD,SAAS,eAAA,EAAK,eAAe,cAA/B,aAAiC,CAA0B,CAAC;IAElE,6BACK,eAAe,KAClB,SAAS,EAAE,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,mBAAmB,EAAE,QAAQ,CAAC,KAAI,KAAK,IAC9D;AACJ,CAAC,CAAC;AAPW,QAAA,yBAAyB,6BAOpC;AAEF,kBAAe,cAAc,CAAC"}
|
package/README.md
CHANGED
|
@@ -80,6 +80,7 @@ import parseCvssScore from '@redhat-cloud-services/frontend-components-utilities
|
|
|
80
80
|
* [routerParams](doc/routerParams.md)
|
|
81
81
|
* [debounce](doc/debounce.md)
|
|
82
82
|
* [cypress](doc/Cypress.md)
|
|
83
|
+
* [RBAC](doc/RBAC.md)
|
|
83
84
|
|
|
84
85
|
Additionaly it exports these utilities
|
|
85
86
|
* AsyncComponent - class to load component via async calls
|
package/esm/RBAC/RBAC.js
CHANGED
|
@@ -34,7 +34,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
34
34
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
38
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
39
|
+
if (ar || !(i in from)) {
|
|
40
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
41
|
+
ar[i] = from[i];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
45
|
+
};
|
|
37
46
|
import { createContext } from 'react';
|
|
47
|
+
import { ResourceDefinitionFilterOperationEnum } from '@redhat-cloud-services/rbac-client';
|
|
38
48
|
export function getRBAC(applicationName, disableCache) {
|
|
39
49
|
var _a, _b, _c, _d, _e;
|
|
40
50
|
if (applicationName === void 0) { applicationName = ''; }
|
|
@@ -62,33 +72,61 @@ export function getRBAC(applicationName, disableCache) {
|
|
|
62
72
|
function isAccessType(permission) {
|
|
63
73
|
return typeof permission === 'object';
|
|
64
74
|
}
|
|
65
|
-
|
|
75
|
+
function extractResourceDefinitionValues(rds) {
|
|
76
|
+
return rds.reduce(function (acc, cur) {
|
|
77
|
+
var _a = cur.attributeFilter, key = _a.key, operation = _a.operation, value = _a.value;
|
|
78
|
+
if (operation === ResourceDefinitionFilterOperationEnum.In) {
|
|
79
|
+
return __spreadArray(__spreadArray([], acc, true), value.split(',').map(function (value) { return "".concat(key, ":").concat(value); }), true);
|
|
80
|
+
}
|
|
81
|
+
if (operation === ResourceDefinitionFilterOperationEnum.Equal) {
|
|
82
|
+
return __spreadArray(__spreadArray([], acc, true), ["".concat(key, ":").concat(value)], false);
|
|
83
|
+
}
|
|
84
|
+
throw new TypeError('Resource definition operation has incorrect format.');
|
|
85
|
+
}, []);
|
|
86
|
+
}
|
|
87
|
+
function verifyResourceDefinitions(userRds, requestedRds) {
|
|
88
|
+
var userValues = extractResourceDefinitionValues(userRds), requestedValues = extractResourceDefinitionValues(requestedRds);
|
|
89
|
+
return requestedValues.every(function (value) { return userValues.includes(value); });
|
|
90
|
+
}
|
|
91
|
+
function checkRequestedPermission(userPermissions, requestedPermission, checkResourceDefinitions) {
|
|
92
|
+
return userPermissions.some(function (userPermission) {
|
|
93
|
+
var requestedPermissionArray = (isAccessType(requestedPermission) ? requestedPermission.permission : requestedPermission).split(':');
|
|
94
|
+
var userPermissionArray = (isAccessType(userPermission) ? userPermission.permission : userPermission).split(':');
|
|
95
|
+
var matchesPermission = userPermissionArray.slice(0).reduce(function (acc, curr, index, array) {
|
|
96
|
+
if (acc === false) {
|
|
97
|
+
array.splice(index);
|
|
98
|
+
return acc;
|
|
99
|
+
}
|
|
100
|
+
return curr === '*' || curr === (requestedPermissionArray === null || requestedPermissionArray === void 0 ? void 0 : requestedPermissionArray[index]);
|
|
101
|
+
}, true);
|
|
102
|
+
if (checkResourceDefinitions === true && matchesPermission === true) {
|
|
103
|
+
if (isAccessType(userPermission)) {
|
|
104
|
+
if (userPermission.resourceDefinitions === undefined || userPermission.resourceDefinitions.length === 0) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
if (!isAccessType(requestedPermission) ||
|
|
108
|
+
userPermission.resourceDefinitions === undefined ||
|
|
109
|
+
requestedPermission.resourceDefinitions.length === 0) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return verifyResourceDefinitions(userPermission.resourceDefinitions, requestedPermission.resourceDefinitions);
|
|
113
|
+
}
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
return matchesPermission;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
export function doesHavePermissions(userPermissions, permissionList, checkResourceDefinitions) {
|
|
66
120
|
if (!userPermissions) {
|
|
67
121
|
return false;
|
|
68
122
|
}
|
|
69
|
-
return
|
|
70
|
-
return permissionList.includes(isAccessType(access) ? access === null || access === void 0 ? void 0 : access.permission : access);
|
|
71
|
-
});
|
|
123
|
+
return permissionList.some(function (permission) { return checkRequestedPermission(userPermissions, permission, checkResourceDefinitions); });
|
|
72
124
|
}
|
|
73
|
-
export function hasAllPermissions(userPermissions, permissionList) {
|
|
125
|
+
export function hasAllPermissions(userPermissions, permissionList, checkResourceDefinitions) {
|
|
74
126
|
if (!userPermissions) {
|
|
75
127
|
return false;
|
|
76
128
|
}
|
|
77
|
-
return permissionList.every(function (permission) {
|
|
78
|
-
return userPermissions.some(function (access) {
|
|
79
|
-
var _a;
|
|
80
|
-
var accessArray = ((_a = (isAccessType(access) ? access === null || access === void 0 ? void 0 : access.permission : access)) === null || _a === void 0 ? void 0 : _a.split(':')) || [];
|
|
81
|
-
var permissionArray = permission.split(':');
|
|
82
|
-
var hasAccess = accessArray.slice(0).reduce(function (acc, curr, index, array) {
|
|
83
|
-
if (acc === false) {
|
|
84
|
-
array.splice(index);
|
|
85
|
-
return acc;
|
|
86
|
-
}
|
|
87
|
-
return curr === '*' || curr === (permissionArray === null || permissionArray === void 0 ? void 0 : permissionArray[index]);
|
|
88
|
-
}, true);
|
|
89
|
-
return hasAccess || accessArray.join(':') === permission;
|
|
90
|
-
});
|
|
91
|
-
});
|
|
129
|
+
return permissionList.every(function (permission) { return checkRequestedPermission(userPermissions, permission, checkResourceDefinitions); });
|
|
92
130
|
}
|
|
93
131
|
export var initialPermissions = {
|
|
94
132
|
isLoading: true,
|
package/esm/RBAC/RBAC.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RBAC.js","sourceRoot":"","sources":["../../src/RBAC/RBAC.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RBAC.js","sourceRoot":"","sources":["../../src/RBAC/RBAC.ts"],"names":[],"mappings":"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"}
|
package/esm/RBACHook/RBACHook.js
CHANGED
|
@@ -58,8 +58,9 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
58
58
|
};
|
|
59
59
|
import { useContext, useEffect, useState } from 'react';
|
|
60
60
|
import { RBACContext, doesHavePermissions, getRBAC, hasAllPermissions } from '../RBAC';
|
|
61
|
-
export function usePermissions(appName, permissionsList, disableCache, checkAll) {
|
|
61
|
+
export function usePermissions(appName, permissionsList, disableCache, checkAll, checkResourceDefinitions) {
|
|
62
62
|
var _this = this;
|
|
63
|
+
if (checkResourceDefinitions === void 0) { checkResourceDefinitions = false; }
|
|
63
64
|
var _a = useState({
|
|
64
65
|
isLoading: true,
|
|
65
66
|
hasAccess: false,
|
|
@@ -81,7 +82,9 @@ export function usePermissions(appName, permissionsList, disableCache, checkAll)
|
|
|
81
82
|
isLoading: false,
|
|
82
83
|
isOrgAdmin: isOrgAdmin,
|
|
83
84
|
permissions: userPermissions,
|
|
84
|
-
hasAccess: checkAll
|
|
85
|
+
hasAccess: checkAll
|
|
86
|
+
? hasAllPermissions(userPermissions, permissionsList, checkResourceDefinitions)
|
|
87
|
+
: doesHavePermissions(userPermissions, permissionsList, checkResourceDefinitions),
|
|
85
88
|
});
|
|
86
89
|
return [2];
|
|
87
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RBACHook.js","sourceRoot":"","sources":["../../src/RBACHook/RBACHook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,WAAW,EAAuB,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"RBACHook.js","sourceRoot":"","sources":["../../src/RBACHook/RBACHook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,WAAW,EAAuB,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG5G,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,eAAoC,EACpC,YAAsB,EACtB,QAAkB,EAClB,wBAAgC;IALlC,iBAmCC;IA9BC,yCAAA,EAAA,gCAAgC;IAE1B,IAAA,KAAgC,QAAQ,CAAsB;QAClE,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,EAAE;KAChB,CAAC,EALK,WAAW,QAAA,EAAE,cAAc,QAKhC,CAAC;IACH,SAAS,CAAC;QACR,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,cAAc,CAAC,UAAC,IAAI,IAAK,OAAA,uBAAM,IAAI,KAAE,SAAS,EAAE,IAAI,IAAG,EAA9B,CAA8B,CAAC,CAAC;QACzD,CAAC;;;;4BACsD,WAAM,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,EAAA;;wBAAnF,KAA+C,SAAoC,EAAjF,UAAU,gBAAA,EAAe,eAAe,iBAAA;wBAChD,CAAC,MAAM;4BACL,cAAc,CAAC;gCACb,SAAS,EAAE,KAAK;gCAChB,UAAU,YAAA;gCACV,WAAW,EAAE,eAAe;gCAC5B,SAAS,EAAE,QAAQ;oCACjB,CAAC,CAAC,iBAAiB,CAAC,eAAe,EAAE,eAAe,EAAE,wBAAwB,CAAC;oCAC/E,CAAC,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,EAAE,wBAAwB,CAAC;6BACpF,CAAC,CAAC;;;;aACN,CAAC,EAAE,CAAC;QAEL,OAAO;YACL,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,IAAM,yBAAyB,GAAG,UAAC,mBAAwC,EAAE,QAAkB;IACpG,IAAM,KAAoC,UAAU,CAAC,WAAW,CAAC,EAAzD,SAAS,eAAA,EAAK,eAAe,cAA/B,aAAiC,CAA0B,CAAC;IAElE,6BACK,eAAe,KAClB,SAAS,EAAE,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,mBAAmB,EAAE,QAAQ,CAAC,KAAI,KAAK,IAC9D;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
|