Skip to content

Commit 6d83faa

Browse files
Merge pull request #3099 from OneCommunityGlobal/sriram-fix-owner-manage-all-permissions
Sriram fix owner manage all permissions
2 parents 59ec2b2 + 795ce9e commit 6d83faa

4 files changed

Lines changed: 46 additions & 7 deletions

File tree

src/components/PermissionsManagement/PermissionList.jsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ function PermissionList(props) {
2121
setPermissions = () => {},
2222
// runs when permission is added or removed
2323
onChange = () => {},
24+
25+
removedDefaultPermissions = [],
26+
27+
setRemovedDefaultPermissions = () => {},
2428
} = props;
2529
return (
2630
<ul className="user-role-tab__permissionList">
@@ -29,6 +33,8 @@ function PermissionList(props) {
2933
key={permission.label}
3034
rolePermissions={rolePermissions}
3135
immutablePermissions={immutablePermissions}
36+
removedDefaultPermissions={removedDefaultPermissions}
37+
setRemovedDefaultPermissions={setRemovedDefaultPermissions}
3238
label={permission.label}
3339
permission={permission.key}
3440
subperms={permission.subperms}

src/components/PermissionsManagement/PermissionListItem.jsx

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@ function PermissionListItem(props) {
2323
editable,
2424
depth,
2525
setPermissions,
26+
setRemovedDefaultPermissions,
27+
removedDefaultPermissions,
2628
} = props;
2729
const isCategory = !!subperms;
2830
const [infoRoleModal, setinfoRoleModal] = useState(false);
2931
const [modalContent, setContent] = useState(null);
3032
const [isMobile, setIsMobile] = useState(false);
3133
const hasThisPermission =
32-
rolePermissions.includes(permission) || immutablePermissions.includes(permission);
34+
rolePermissions.includes(permission) ||
35+
(immutablePermissions.includes(permission) && !removedDefaultPermissions?.includes(permission));
3336
const { updateModalStatus } = useContext(ModalContext);
3437

3538
const darkMode = useSelector(state => state.theme.darkMode);
@@ -51,16 +54,23 @@ function PermissionListItem(props) {
5154
const toggleInfoRoleModal = () => {
5255
setinfoRoleModal(!infoRoleModal);
5356
};
54-
5557
const togglePermission = permissionKey => {
56-
if (rolePermissions.includes(permissionKey) || immutablePermissions.includes(permissionKey)) {
58+
// Default perms can only be managed (Add/Delete) by users with "putUserProfilePermissions" perm.
59+
if (immutablePermissions.includes(permissionKey)) {
60+
if (!removedDefaultPermissions?.includes(permissionKey)) {
61+
// deleteing default perm
62+
setRemovedDefaultPermissions(previous => [...previous, permissionKey]);
63+
} else {
64+
// adding the default perm back
65+
setRemovedDefaultPermissions(previous => previous.filter(perm => perm !== permissionKey));
66+
}
67+
} else if (rolePermissions.includes(permissionKey)) {
5768
setPermissions(previous => previous.filter(perm => perm !== permissionKey));
5869
} else if (rolePermissions.includes('showModal')) {
5970
setPermissions(previous => [...previous, permissionKey]);
6071
} else {
6172
setPermissions(previous => [...previous, permissionKey]);
6273
}
63-
6474
props.onChange();
6575
};
6676

@@ -214,7 +224,9 @@ function PermissionListItem(props) {
214224
updateModalStatus(true);
215225
}}
216226
disabled={
217-
!props.hasPermission('putRole') || immutablePermissions.includes(permission)
227+
!props.hasPermission('putRole') ||
228+
(immutablePermissions.includes(permission) &&
229+
!props.hasPermission('putUserProfilePermissions'))
218230
}
219231
style={darkMode ? boxStyleDark : boxStyle}
220232
>
@@ -241,6 +253,8 @@ function PermissionListItem(props) {
241253
onChange={props.onChange}
242254
depth={isMobile ? depth : depth + 1}
243255
darkMode={darkMode}
256+
removedDefaultPermissions={removedDefaultPermissions}
257+
setRemovedDefaultPermissions={setRemovedDefaultPermissions}
244258
/>
245259
</li>
246260
) : null}

src/components/PermissionsManagement/UserPermissionsPopUp.jsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ function UserPermissionsPopUp({
3434
const [searchText, onInputChange] = useState('');
3535
const [actualUserProfile, setActualUserProfile] = useState();
3636
const [userPermissions, setUserPermissions] = useState();
37+
const [userRemovedDefaultPermissions, setUserRemovedDefaultPermissions] = useState(); // defulat perms taht were deleted
3738
const [isOpen, setIsOpen] = useState(false);
3839
const [isInputFocus, setIsInputFocus] = useState(false);
3940
const [actualUserRolePermission, setActualUserRolePermission] = useState();
@@ -46,6 +47,9 @@ function UserPermissionsPopUp({
4647

4748
useEffect(() => {
4849
setUserPermissions(actualUserProfile?.permissions?.frontPermissions);
50+
setUserRemovedDefaultPermissions(
51+
actualUserProfile?.permissions?.removedDefaultPermissions || [],
52+
);
4953
}, [actualUserProfile]);
5054

5155
const refInput = useRef();
@@ -82,7 +86,13 @@ function UserPermissionsPopUp({
8286

8387
const url = ENDPOINTS.USER_PROFILE(userId);
8488
const allUserInfo = await axios.get(url).then(res => res.data);
85-
const newUserInfo = { ...allUserInfo, permissions: { frontPermissions: userPermissions } };
89+
const newUserInfo = {
90+
...allUserInfo,
91+
permissions: {
92+
frontPermissions: userPermissions,
93+
removedDefaultPermissions: userRemovedDefaultPermissions,
94+
},
95+
};
8696

8797
axios
8898
.put(url, newUserInfo)
@@ -233,6 +243,8 @@ function UserPermissionsPopUp({
233243
immutablePermissions={actualUserRolePermission}
234244
editable={!!actualUserProfile}
235245
setPermissions={setUserPermissions}
246+
removedDefaultPermissions={userRemovedDefaultPermissions}
247+
setRemovedDefaultPermissions={setUserRemovedDefaultPermissions}
236248
/>
237249
</ul>
238250
</div>

src/utils/permissions.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,23 @@ const hasPermission = (action, viewingUser = false) => {
99
const state = getState();
1010
const rolePermissions = state.role.roles;
1111
const userRole = viewingUser ? state.userProfile.role : state.auth.user.role;
12+
1213
const userPermissions = viewingUser
1314
? state.userProfile.permissions?.frontPermissions
1415
: state.auth.user.permissions?.frontPermissions;
16+
17+
const removedDefaultPermissions = viewingUser
18+
? state.userProfile.permissions?.removedDefaultPermissions
19+
: state.auth.user.permissions?.removedDefaultPermissions || [];
20+
1521
if (userRole && rolePermissions && rolePermissions.length !== 0) {
1622
const roleIndex = rolePermissions?.findIndex(({ roleName }) => roleName === userRole);
1723
let permissions = [];
1824
if (roleIndex !== -1) {
1925
permissions = rolePermissions[roleIndex].permissions;
2026
}
21-
return userPermissions?.includes(action) || permissions?.includes(action);
27+
const rolePerms = permissions.filter(perm => !removedDefaultPermissions.includes(perm));
28+
return userPermissions?.includes(action) || rolePerms?.includes(action);
2229
}
2330
return false;
2431
};

0 commit comments

Comments
 (0)