Skip to content

Commit c7e6893

Browse files
fix: [UIE-9071, UIE-9072] - IAM RBAC: clone linode permission fix, edit linode label permission fix (linode#12668)
* feat: [UIE-9071, UIE-9072] - IAM RBAC: clone linode permission fix, edit linode label permission fix * Added changeset: IAM RBAC: Missing 'update_linode' check for label edits, missing 'create_linode' account check when enabling Clone button
1 parent 243e828 commit c7e6893

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
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 RBAC: Missing 'update_linode' check for label edits, missing 'create_linode' account check when enabling Clone button ([#12668](https://github.com/linode/manager/pull/12668))

packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/LinodeDetailHeader.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import * as React from 'react';
88
import { LandingHeader } from 'src/components/LandingHeader';
99
import { ProductInformationBanner } from 'src/components/ProductInformationBanner/ProductInformationBanner';
1010
import { PENDING_MAINTENANCE_FILTER } from 'src/features/Account/Maintenance/utilities';
11+
import { usePermissions } from 'src/features/IAM/hooks/usePermissions';
1112
import { LinodeEntityDetail } from 'src/features/Linodes/LinodeEntityDetail';
1213
import { MigrateLinode } from 'src/features/Linodes/MigrateLinode/MigrateLinode';
1314
import { PowerActionsDialog } from 'src/features/Linodes/PowerActionsDialogOrDrawer';
@@ -55,6 +56,11 @@ export const LinodeDetailHeader = () => {
5556
const { mutateAsync: updateLinode } =
5657
useLinodeUpdateMutation(matchedLinodeId);
5758

59+
const { data: permissions } = usePermissions(
60+
'linode',
61+
['update_linode'],
62+
linodeId
63+
);
5864
const [powerAction, setPowerAction] = React.useState<Action>('Reboot');
5965
const [powerDialogOpen, setPowerDialogOpen] = React.useState(false);
6066
const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(search.delete);
@@ -193,6 +199,7 @@ export const LinodeDetailHeader = () => {
193199
},
194200
pathname: `/linodes/${linode.label}`,
195201
}}
202+
disabledBreadcrumbEditButton={!permissions.update_linode}
196203
docsLabel="Docs"
197204
docsLink="https://techdocs.akamai.com/cloud-computing/docs/getting-started"
198205
onDocsClick={() => {

packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ export const LinodeActionMenu = (props: LinodeActionMenuProps) => {
5757
const isBareMetalInstance = linodeType?.class === 'metal';
5858
const hasHostMaintenance = linodeStatus === 'stopped';
5959

60+
const { data: accountPermissions } = usePermissions('account', [
61+
'create_linode',
62+
]);
63+
6064
const { data: permissions } = usePermissions(
6165
'linode',
6266
[
@@ -144,6 +148,7 @@ export const LinodeActionMenu = (props: LinodeActionMenuProps) => {
144148
condition: !isBareMetalInstance,
145149
disabled:
146150
!permissions.clone_linode ||
151+
!accountPermissions.create_linode ||
147152
hasHostMaintenance ||
148153
linodeIsInDistributedRegion,
149154
isReadOnly: !permissions.clone_linode,

0 commit comments

Comments
 (0)