diff --git a/src/Pages/Repositories/ContentListTable/ContentListTable.tsx b/src/Pages/Repositories/ContentListTable/ContentListTable.tsx index 1ab59bc2..5a348907 100644 --- a/src/Pages/Repositories/ContentListTable/ContentListTable.tsx +++ b/src/Pages/Repositories/ContentListTable/ContentListTable.tsx @@ -303,22 +303,26 @@ const ContentListTable = () => { ] : [] : [ - { - isDisabled: actionTakingPlace || rowData?.status === 'Pending', - title: 'Edit', - onClick: () => { - navigate(`${rowData.uuid}/${EDIT_ROUTE}`); - }, - }, - ...(rowData.origin === ContentOrigin.UPLOAD + ...(rbac?.repoWrite ? [ { isDisabled: actionTakingPlace || rowData?.status === 'Pending', - title: 'Upload content', + title: 'Edit', onClick: () => { - navigate(`${rowData.uuid}/${UPLOAD_ROUTE}`); + navigate(`${rowData.uuid}/${EDIT_ROUTE}`); }, }, + ...(rowData.origin === ContentOrigin.UPLOAD + ? [ + { + isDisabled: actionTakingPlace || rowData?.status === 'Pending', + title: 'Upload content', + onClick: () => { + navigate(`${rowData.uuid}/${UPLOAD_ROUTE}`); + }, + }, + ] + : []), ] : []), ...(features?.snapshots?.accessible @@ -330,7 +334,7 @@ const ContentListTable = () => { navigate(`${rowData.uuid}/snapshots`); }, }, - ...(rowData.origin !== ContentOrigin.UPLOAD + ...(rbac?.repoWrite && rowData.origin !== ContentOrigin.UPLOAD ? [ { id: 'actions-column-snapshot', @@ -358,7 +362,7 @@ const ContentListTable = () => { : []), ] : []), - ...(!rowData?.snapshot + ...(rbac?.repoWrite && !rowData?.snapshot ? [ { isDisabled: actionTakingPlace || rowData?.status == 'Pending', @@ -368,11 +372,15 @@ const ContentListTable = () => { }, ] : []), - { isSeparator: true }, - { - title: 'Delete', - onClick: () => navigate(`${DELETE_ROUTE}?repoUUID=${rowData.uuid}`), - }, + ...(rbac?.repoWrite + ? [ + { isSeparator: true }, + { + title: 'Delete', + onClick: () => navigate(`${DELETE_ROUTE}?repoUUID=${rowData.uuid}`), + }, + ] + : []), ], [actionTakingPlace, checkedRepositories, isRedHatRepository], ); @@ -630,15 +638,11 @@ const ContentListTable = () => { diff --git a/src/Pages/Repositories/ContentListTable/components/SnapshotListModal/SnapshotListModal.tsx b/src/Pages/Repositories/ContentListTable/components/SnapshotListModal/SnapshotListModal.tsx index 9107b116..89e4e364 100644 --- a/src/Pages/Repositories/ContentListTable/components/SnapshotListModal/SnapshotListModal.tsx +++ b/src/Pages/Repositories/ContentListTable/components/SnapshotListModal/SnapshotListModal.tsx @@ -1,4 +1,3 @@ -/* eslint-disable quotes */ import { Button, Flex, diff --git a/src/components/SharedTables/AdvisoriesTable/index.tsx b/src/components/SharedTables/AdvisoriesTable/index.tsx index 5c264448..ce197562 100644 --- a/src/components/SharedTables/AdvisoriesTable/index.tsx +++ b/src/components/SharedTables/AdvisoriesTable/index.tsx @@ -124,7 +124,7 @@ export default function AdvisoriesTable({ - {[...new Map(errataList.map(e => [e.errata_id, e])).values()].map( + {[...new Map(errataList.map((e) => [e.errata_id, e])).values()].map( ( { errata_id, diff --git a/src/middleware/AppContext.tsx b/src/middleware/AppContext.tsx index 0da82314..060b1d04 100644 --- a/src/middleware/AppContext.tsx +++ b/src/middleware/AppContext.tsx @@ -14,8 +14,16 @@ import { useFetchSubscriptionsQuery } from 'services/Subscriptions/SubscriptionQ const getRegistry = _getRegistry as unknown as () => { register: ({ notifications }) => void }; const { appname } = PackageJson.insights; +// Add permissions here +export enum RbacPermissions { + 'repoRead', // If the user doesn't have this permission, they won't see the app, it is thus presumed true. + 'repoWrite', + 'templateWrite', + 'templateRead', +} + export interface AppContextInterface { - rbac?: Record; + rbac?: Record; features: Features | null; isFetchingPermissions: boolean; subscriptions?: Subscriptions; @@ -29,7 +37,9 @@ export interface AppContextInterface { export const AppContext = createContext({} as AppContextInterface); export const ContextProvider = ({ children }: { children: ReactNode }) => { - const [rbac, setRbac] = useState | undefined>(undefined); + const [rbac, setRbac] = useState | undefined>( + undefined, + ); const [zeroState, setZeroState] = useState(true); const [features, setFeatures] = useState(null); const chrome = useChrome();