Skip to content

Commit aaeabe8

Browse files
fix: [UIE-9495, UIE-9595] - Permissions fixes for admin users on users pages (linode#13074)
* handle admin users account permissions defaults better * Safe permission checks on user pages * Same for action menu * Added changeset: Permissions fixes for admin users on users pages
1 parent 31fc451 commit aaeabe8

File tree

4 files changed

+15
-14
lines changed

4 files changed

+15
-14
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/manager": Fixed
3+
---
4+
5+
Permissions fixes for admin users on users pages ([#13074](https://github.com/linode/manager/pull/13074))

packages/manager/src/features/IAM/Users/UserDetails/UserProfile.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,24 @@ export const UserProfile = () => {
2525
'delete_user',
2626
]);
2727

28+
const isAccountAdmin = permissions?.is_account_admin;
29+
2830
const {
2931
data: user,
3032
error,
3133
isLoading,
32-
} = useAccountUser(username ?? '', permissions?.is_account_admin);
33-
const { data: assignedRoles } = useUserRoles(
34-
username ?? '',
35-
permissions?.is_account_admin
36-
);
34+
} = useAccountUser(username ?? '', isAccountAdmin);
35+
const { data: assignedRoles } = useUserRoles(username ?? '', isAccountAdmin);
3736

38-
const canUpdateUser = permissions?.update_user;
39-
const canDeleteUser = permissions?.delete_user;
37+
// Only admin users get update_user and delete_user permissions, but doing a bit of defensive programming here to be safe.
38+
const canUpdateUser = isAccountAdmin || permissions?.update_user;
39+
const canDeleteUser = isAccountAdmin || permissions?.delete_user;
4040

4141
if (isLoading) {
4242
return <CircleProgress />;
4343
}
4444

45-
if (!permissions?.is_account_admin) {
45+
if (!isAccountAdmin) {
4646
return (
4747
<Notice variant="error">
4848
You do not have permission to view this user&apos;s details.

packages/manager/src/features/IAM/Users/UserDetails/UsernamePanel.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ import { Controller, useForm } from 'react-hook-form';
99

1010
import { RESTRICTED_FIELD_TOOLTIP } from 'src/features/Account/constants';
1111

12-
import { usePermissions } from '../../hooks/usePermissions';
13-
1412
import type { User } from '@linode/api-v4';
1513

1614
interface Props {
@@ -26,8 +24,6 @@ export const UsernamePanel = ({ activeUser, canUpdateUser }: Props) => {
2624

2725
const { mutateAsync } = useUpdateUserMutation(activeUser.username);
2826

29-
const { data: permissions } = usePermissions('account', ['update_user']);
30-
3127
const {
3228
control,
3329
formState: { isDirty, isSubmitting },
@@ -55,7 +51,7 @@ export const UsernamePanel = ({ activeUser, canUpdateUser }: Props) => {
5551
}
5652
};
5753

58-
const tooltipForDisabledUsernameField = !permissions.update_user
54+
const tooltipForDisabledUsernameField = !canUpdateUser
5955
? 'Restricted users cannot update their username. Please contact an account administrator.'
6056
: isProxyUser
6157
? RESTRICTED_FIELD_TOOLTIP

packages/manager/src/features/IAM/Users/UsersTable/UsersActionMenu.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export const UsersActionMenu = (props: Props) => {
2929
useDelegationRole();
3030

3131
const isAccountAdmin = permissions.is_account_admin;
32-
const canDeleteUser = permissions.delete_user;
32+
const canDeleteUser = isAccountAdmin || permissions.delete_user;
3333
const isDelegateUser = userType === 'delegate';
3434

3535
// Determine if the current account is a child account with isIAMDelegationEnabled enabled

0 commit comments

Comments
 (0)