1
- import { FC , useCallback , useMemo } from 'react'
1
+ import { FC , useCallback , useContext , useMemo } from 'react'
2
2
import { find } from 'lodash'
3
3
import { NavigateFunction , Params , useNavigate , useParams } from 'react-router-dom'
4
4
@@ -14,6 +14,7 @@ import {
14
14
TableColumn ,
15
15
useConfirmationModal ,
16
16
} from '~/libs/ui'
17
+ import { profileContext , ProfileContextData , UserRole } from '~/libs/core'
17
18
18
19
import { ProjectTypeLabels } from '../../constants'
19
20
import { approveCopilotRequest , CopilotRequestsResponse , useCopilotRequests } from '../../services/copilot-requests'
@@ -121,6 +122,12 @@ const CopilotRequestsPage: FC = () => {
121
122
const navigate : NavigateFunction = useNavigate ( )
122
123
const routeParams : Params < string > = useParams ( )
123
124
125
+ const { profile } : ProfileContextData = useContext ( profileContext )
126
+ const isAdminOrPM : boolean = useMemo (
127
+ ( ) => ! ! profile ?. roles ?. some ( role => role === UserRole . administrator || role === UserRole . projectManager ) ,
128
+ [ profile ] ,
129
+ )
130
+
124
131
const { data : requests = [ ] , isValidating : requestsLoading } : CopilotRequestsResponse = useCopilotRequests ( )
125
132
const projectIds = useMemo ( ( ) => (
126
133
( new Set ( requests . map ( r => r . projectId ) )
@@ -158,6 +165,15 @@ const CopilotRequestsPage: FC = () => {
158
165
onClick : ( ) => navigate ( copilotRoutesMap . CopilotRequestForm ) ,
159
166
}
160
167
168
+ if ( ! isAdminOrPM ) {
169
+ return (
170
+ < ContentLayout title = 'Copilot Requests' >
171
+ < PageTitle > Access Denied</ PageTitle >
172
+ < p > You do not have required permissions to access this page.</ p >
173
+ </ ContentLayout >
174
+ )
175
+ }
176
+
161
177
return (
162
178
< ContentLayout
163
179
title = 'Copilot Requests'
0 commit comments