Skip to content

Commit 7515c1c

Browse files
fix: [UIE-9795], [UIE-9796], [UIE-9797] - Enable account_viewer to access IAM User Details, User Roles and Entities (#13194)
* fix: [UIE-9795], [UIE-9796] - Enable account_viewer to access IAM User Details and User Roles * Added changeset: IAM: Enable account_viewer to access IAM User Details and User Roles * disable chip * fix: [UIE-9797] - Enable account_viewer to access IAM User Entites, chip fix * changeset update
1 parent dc4e474 commit 7515c1c

File tree

7 files changed

+48
-14
lines changed

7 files changed

+48
-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+
IAM: Enable account_viewer to access IAM User Details, User Roles and User Entities ([#13194](https://github.com/linode/manager/pull/13194))

packages/manager/src/features/IAM/Shared/AssignedRolesTable/AssignedRolesTable.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ export const AssignedRolesTable = () => {
262262
) : (
263263
<TableCell sx={{ display: { sm: 'table-cell', xs: 'none' } }}>
264264
<AssignedEntities
265+
disabled={!permissions.is_account_admin}
265266
onButtonClick={handleViewEntities}
266267
onRemoveAssignment={handleRemoveAssignment}
267268
role={role}

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,31 @@ import { UsernamePanel } from './UsernamePanel';
1919

2020
export const UserProfile = () => {
2121
const { username } = useParams({ from: '/iam/users/$username' });
22-
const { data: permissions } = usePermissions('account', ['is_account_admin']);
22+
const { data: permissions } = usePermissions('account', [
23+
'is_account_admin',
24+
'view_account',
25+
]);
2326

2427
const isAccountAdmin = permissions?.is_account_admin;
2528

2629
const {
2730
data: user,
2831
error,
2932
isLoading,
30-
} = useAccountUser(username ?? '', isAccountAdmin);
31-
const { data: assignedRoles } = useUserRoles(username ?? '', isAccountAdmin);
33+
} = useAccountUser(
34+
username ?? '',
35+
isAccountAdmin || permissions?.view_account
36+
);
37+
const { data: assignedRoles } = useUserRoles(
38+
username ?? '',
39+
isAccountAdmin || permissions?.view_account
40+
);
3241

3342
if (isLoading) {
3443
return <CircleProgress />;
3544
}
3645

37-
if (!isAccountAdmin) {
46+
if (!(isAccountAdmin || permissions?.view_account)) {
3847
return (
3948
<Notice variant="error">
4049
You do not have permission to view this user&apos;s details.

packages/manager/src/features/IAM/Users/UserEntities/UserEntities.test.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ describe('UserEntities', () => {
156156
queryMocks.usePermissions.mockReturnValue({
157157
data: {
158158
is_account_admin: false,
159+
view_account: false,
159160
},
160161
});
161162

packages/manager/src/features/IAM/Users/UserEntities/UserEntities.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,22 @@ import { NoAssignedRoles } from '../../Shared/NoAssignedRoles/NoAssignedRoles';
2323
export const UserEntities = () => {
2424
const theme = useTheme();
2525
const { username } = useParams({ from: '/iam/users/$username' });
26-
const { data: permissions } = usePermissions('account', ['is_account_admin']);
26+
const { data: permissions } = usePermissions('account', [
27+
'is_account_admin',
28+
'view_account',
29+
]);
2730
const {
2831
data: assignedRoles,
2932
isLoading,
3033
error: assignedRolesError,
31-
} = useUserRoles(username ?? '', permissions?.is_account_admin);
34+
} = useUserRoles(
35+
username ?? '',
36+
permissions?.is_account_admin || permissions?.view_account
37+
);
3238

3339
const { error } = useAccountUser(
3440
username ?? '',
35-
permissions?.is_account_admin
41+
permissions?.is_account_admin || permissions?.view_account
3642
);
3743

3844
const hasAssignedRoles = assignedRoles
@@ -43,7 +49,7 @@ export const UserEntities = () => {
4349
return <CircleProgress />;
4450
}
4551

46-
if (!permissions?.is_account_admin) {
52+
if (!(permissions?.is_account_admin || permissions?.view_account)) {
4753
return (
4854
<Notice variant="error">
4955
You do not have permission to view this user&apos;s entities.

packages/manager/src/features/IAM/Users/UserRoles/AssignedEntities.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import type { CombinedEntity, ExtendedRoleView } from '../../Shared/types';
99
import type { AccountRoleType, EntityRoleType } from '@linode/api-v4';
1010

1111
interface Props {
12+
disabled?: boolean;
1213
onButtonClick: (roleName: AccountRoleType | EntityRoleType) => void;
1314
onRemoveAssignment: (entity: CombinedEntity, role: ExtendedRoleView) => void;
1415
role: ExtendedRoleView;
@@ -18,6 +19,7 @@ export const AssignedEntities = ({
1819
onButtonClick,
1920
onRemoveAssignment,
2021
role,
22+
disabled,
2123
}: Props) => {
2224
const theme = useTheme();
2325

@@ -54,13 +56,17 @@ export const AssignedEntities = ({
5456
>
5557
<Chip
5658
data-testid="entities"
57-
deleteIcon={<CloseIcon data-testid="CloseIcon" />}
59+
deleteIcon={
60+
disabled ? undefined : <CloseIcon data-testid="CloseIcon" />
61+
}
5862
label={
5963
entity.name.length > 30
6064
? `${entity.name.slice(0, 20)}...`
6165
: entity.name
6266
}
63-
onDelete={() => onRemoveAssignment(entity, role)}
67+
onDelete={
68+
disabled ? undefined : () => onRemoveAssignment(entity, role)
69+
}
6470
sx={{
6571
backgroundColor:
6672
theme.name === 'light'

packages/manager/src/features/IAM/Users/UserRoles/UserRoles.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,24 @@ import { NoAssignedRoles } from '../../Shared/NoAssignedRoles/NoAssignedRoles';
2222

2323
export const UserRoles = () => {
2424
const { username } = useParams({ from: '/iam/users/$username' });
25-
const { data: permissions } = usePermissions('account', ['is_account_admin']);
25+
const { data: permissions } = usePermissions('account', [
26+
'is_account_admin',
27+
'view_account',
28+
]);
2629
const theme = useTheme();
2730

2831
const {
2932
data: assignedRoles,
3033
isLoading,
3134
error: assignedRolesError,
32-
} = useUserRoles(username ?? '', permissions?.is_account_admin);
35+
} = useUserRoles(
36+
username ?? '',
37+
permissions?.is_account_admin || permissions?.view_account
38+
);
3339

3440
const { error } = useAccountUser(
3541
username ?? '',
36-
permissions?.is_account_admin
42+
permissions?.is_account_admin || permissions?.view_account
3743
);
3844

3945
const hasAssignedRoles = assignedRoles
@@ -45,7 +51,7 @@ export const UserRoles = () => {
4551
return <CircleProgress />;
4652
}
4753

48-
if (!permissions?.is_account_admin) {
54+
if (!(permissions?.is_account_admin || permissions?.view_account)) {
4955
return (
5056
<Notice variant="error">
5157
You do not have permission to view this user&apos;s roles.

0 commit comments

Comments
 (0)