Skip to content

Commit c4f2969

Browse files
authored
fix(rbac): disable edit when the user is unauthorized to read the catalog-entity (#1049)
1 parent 85747d4 commit c4f2969

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

plugins/rbac/src/components/RoleOverview/MembersCard.tsx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22

33
import { Table, WarningPanel } from '@backstage/core-components';
4+
import { catalogEntityReadPermission } from '@backstage/plugin-catalog-common/alpha';
45
import { usePermission } from '@backstage/plugin-permission-react';
56

67
import { Card, CardContent, makeStyles } from '@material-ui/core';
@@ -43,10 +44,14 @@ const getEditIcon = (isAllowed: boolean, roleName: string) => {
4344
export const MembersCard = ({ roleName }: MembersCardProps) => {
4445
const { data, loading, retry, error } = useMembers(roleName);
4546
const [members, setMembers] = React.useState<MembersData[]>();
46-
const permissionResult = usePermission({
47+
const policyEntityPermissionResult = usePermission({
4748
permission: policyEntityUpdatePermission,
4849
resourceRef: policyEntityUpdatePermission.resourceType,
4950
});
51+
const catalogEntityPermissionResult = usePermission({
52+
permission: catalogEntityReadPermission,
53+
resourceRef: catalogEntityReadPermission.resourceType,
54+
});
5055

5156
const classes = useStyles();
5257
const actions = [
@@ -57,8 +62,17 @@ export const MembersCard = ({ roleName }: MembersCardProps) => {
5762
onClick: () => retry(),
5863
},
5964
{
60-
icon: () => getEditIcon(permissionResult.allowed, roleName),
61-
tooltip: !permissionResult.allowed ? 'Unauthorized to edit' : 'Edit',
65+
icon: () =>
66+
getEditIcon(
67+
policyEntityPermissionResult.allowed &&
68+
catalogEntityPermissionResult.allowed,
69+
roleName,
70+
),
71+
tooltip:
72+
catalogEntityPermissionResult.allowed &&
73+
policyEntityPermissionResult.allowed
74+
? 'Edit'
75+
: 'Unauthorized to edit',
6276
isFreeAction: true,
6377
onClick: () => {},
6478
},

plugins/rbac/src/hooks/useRoles.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,26 @@ export const useRoles = (
8181
lastModified: '-',
8282
actionsPermissionResults: {
8383
delete: deletePermissionResult,
84-
edit: editPermissionResult,
84+
edit: {
85+
allowed:
86+
editPermissionResult.allowed &&
87+
catalogEntityReadPermissionResult.allowed,
88+
loading:
89+
editPermissionResult.loading &&
90+
catalogEntityReadPermissionResult.loading,
91+
},
8592
},
8693
},
8794
];
8895
}, [])
8996
: [],
90-
[roles, policies, deletePermissionResult, editPermissionResult],
97+
[
98+
roles,
99+
policies,
100+
deletePermissionResult,
101+
editPermissionResult,
102+
catalogEntityReadPermissionResult,
103+
],
91104
);
92105
const loading = rolesLoading && policiesLoading;
93106
useInterval(

0 commit comments

Comments
 (0)