-
Notifications
You must be signed in to change notification settings - Fork 114
/
Copy pathpermissionsHelper.js
61 lines (53 loc) · 1.57 KB
/
permissionsHelper.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import { translate as __, sprintf } from 'foremanReact/common/I18n';
export const permissionCheck = (user, permissionsRequired) => {
if (permissionsRequired.length === 0) {
return { allowed: true };
}
if (!user) {
throw new Error(
'No user data when loading the page - cannot determine if current user is allowed to view the page.'
);
}
if (
user.admin ||
user.usergroups.nodes.find(usergroup => usergroup.admin === true)
) {
return { allowed: true };
}
const permList = permissionsRequired.reduce((memo, item) => {
const found = user.permissions.nodes.find(
permission => permission.name === item
);
memo.push({ name: item, present: !!found });
return memo;
}, []);
if (permList.reduce((memo, item) => memo && item.present, true)) {
return { allowed: true, permissions: permList };
}
return { allowed: false, permissions: permList };
};
export const permissionDeniedMsg = permissions => {
let msg = __('You are not authorized to view the page. ');
if (permissions?.length > 0) {
msg += sprintf(
__('Request the following permissions from administrator: %s.'),
permissions.join(', ')
);
}
return msg;
};
export const allowPrimaryAction = (
emptyStateProps,
currentUser,
permissionsRequired
) => {
if (!permissionCheck(currentUser, permissionsRequired).allowed) {
return Object.keys(emptyStateProps)
.filter(key => key !== 'action')
.reduce((memo, key) => {
memo[key] = emptyStateProps[key];
return memo;
}, {});
}
return emptyStateProps;
};