@@ -12,9 +12,11 @@ import { usePermissions } from "@/hooks/use-permissions"
1212import { usePolicies } from "@/hooks/use-policies"
1313import { useGroups } from "@/hooks/use-groups"
1414import { useMessage } from "@/lib/feedback/message"
15+ import { getAvailableUserEditTabs } from "@/lib/user-edit-tabs"
1516import { UserEditSecretKey } from "./edit/secret-key"
1617import { UserEditGroups } from "./edit/groups"
1718import { UserEditPolicies } from "./edit/policies"
19+ import { UserEditAccessKeys } from "./edit/access-keys"
1820
1921interface UserRow {
2022 accessKey : string
@@ -49,6 +51,8 @@ export function UserEditForm({ open, onOpenChange, row, onSuccess }: UserEditFor
4951 const canEditAccount = canCapability ( "users.edit" )
5052 const canAssignGroups = canCapability ( "users.assignGroups" )
5153 const canEditPolicies = canCapability ( "users.policy.edit" )
54+ const canManageAccessKeys =
55+ canCapability ( "accessKeys.create" ) || canCapability ( "accessKeys.edit" ) || canCapability ( "accessKeys.delete" )
5256
5357 const [ user , setUser ] = React . useState < {
5458 accessKey : string
@@ -72,12 +76,13 @@ export function UserEditForm({ open, onOpenChange, row, onSuccess }: UserEditFor
7276
7377 const statusBoolean = user . status === "enabled"
7478 const availableTabs = React . useMemo ( ( ) => {
75- const tabs : string [ ] = [ ]
76- if ( canEditAccount ) tabs . push ( "account" )
77- if ( canAssignGroups ) tabs . push ( "groups" )
78- if ( canEditPolicies ) tabs . push ( "policy" )
79- return tabs
80- } , [ canAssignGroups , canEditAccount , canEditPolicies ] )
79+ return getAvailableUserEditTabs ( {
80+ canEditAccount,
81+ canAssignGroups,
82+ canEditPolicies,
83+ canManageAccessKeys,
84+ } )
85+ } , [ canAssignGroups , canEditAccount , canEditPolicies , canManageAccessKeys ] )
8186
8287 React . useEffect ( ( ) => {
8388 if ( ! open || ! row ?. accessKey ) return
@@ -223,7 +228,7 @@ export function UserEditForm({ open, onOpenChange, row, onSuccess }: UserEditFor
223228 return (
224229 < Dialog open = { open } onOpenChange = { closeModal } >
225230 < DialogContent
226- className = "sm:max-w-lg "
231+ className = "sm:max-w-5xl "
227232 onPointerDownOutside = { ( e ) => e . preventDefault ( ) }
228233 onInteractOutside = { ( e ) => e . preventDefault ( ) }
229234 >
@@ -237,6 +242,7 @@ export function UserEditForm({ open, onOpenChange, row, onSuccess }: UserEditFor
237242 { canEditAccount ? < TabsTrigger value = "account" > { t ( "Account" ) } </ TabsTrigger > : null }
238243 { canAssignGroups ? < TabsTrigger value = "groups" > { t ( "Groups" ) } </ TabsTrigger > : null }
239244 { canEditPolicies ? < TabsTrigger value = "policy" > { t ( "Policies" ) } </ TabsTrigger > : null }
245+ { canManageAccessKeys ? < TabsTrigger value = "access-keys" > { t ( "Access Keys" ) } </ TabsTrigger > : null }
240246 </ TabsList >
241247
242248 { canEditAccount ? (
@@ -279,6 +285,12 @@ export function UserEditForm({ open, onOpenChange, row, onSuccess }: UserEditFor
279285 />
280286 </ TabsContent >
281287 ) : null }
288+
289+ { canManageAccessKeys ? (
290+ < TabsContent value = "access-keys" className = "mt-0" >
291+ < UserEditAccessKeys userName = { user . accessKey } />
292+ </ TabsContent >
293+ ) : null }
282294 </ Tabs >
283295 </ div >
284296
0 commit comments