mirror of
https://github.com/langgenius/dify.git
synced 2026-05-13 08:57:28 +08:00
feat: update role management to use RoleListRequest for improved pagination and owner inclusion
This commit is contained in:
parent
319e71b408
commit
7e0a3ee8fc
@ -1,8 +1,8 @@
|
||||
import type { PaginationParameters } from '@/models/access-control'
|
||||
import type { RoleListRequest } from '@/models/access-control'
|
||||
import { useWorkspaceRoleList } from '@/service/access-control/use-workspace-roles'
|
||||
import { formatRoleGroups } from './helpers'
|
||||
|
||||
export const useRoleGroups = (params?: PaginationParameters) => {
|
||||
export const useRoleGroups = (params: RoleListRequest) => {
|
||||
const { data: roleList, isLoading } = useWorkspaceRoleList(params)
|
||||
|
||||
const roleGroups = formatRoleGroups(roleList)
|
||||
|
||||
@ -18,7 +18,11 @@ type ModalState = {
|
||||
const PermissionsPage = () => {
|
||||
const [modalState, setModalState] = useState<ModalState>(null)
|
||||
|
||||
const { roleGroups } = useRoleGroups()
|
||||
const { roleGroups } = useRoleGroups({
|
||||
page: 1,
|
||||
limit: 20,
|
||||
include_owner: 1,
|
||||
})
|
||||
|
||||
const { mutateAsync: createWorkspaceRole } = useCreateWorkspaceRole()
|
||||
const { mutateAsync: updateWorkspaceRole } = useUpdateWorkspaceRole()
|
||||
|
||||
@ -53,6 +53,11 @@ const RowMenu = ({
|
||||
})
|
||||
}, [deleteRole, role.id])
|
||||
|
||||
const hasViewAction = roleCategory === 'global_system_default' && role.role_tag === 'owner'
|
||||
const hasEditAction = roleCategory === 'global_custom' || (roleCategory === 'global_system_default' && role.role_tag !== 'owner')
|
||||
const hasDuplicateAction = roleCategory === 'global_custom'
|
||||
const hasDeleteAction = roleCategory === 'global_custom'
|
||||
|
||||
return (
|
||||
<DropdownMenu open={open} onOpenChange={setOpen}>
|
||||
<DropdownMenuTrigger render={<ActionButton size="l" className={open ? 'bg-state-base-hover' : ''} aria-label="More actions" />}>
|
||||
@ -60,21 +65,29 @@ const RowMenu = ({
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent placement="bottom-end" sideOffset={4} popupClassName="min-w-[160px]">
|
||||
{
|
||||
roleCategory === 'global_system_default' && (
|
||||
hasViewAction && (
|
||||
<DropdownMenuItem className="system-sm-semibold text-text-secondary" onClick={handleView}>
|
||||
View
|
||||
</DropdownMenuItem>
|
||||
)
|
||||
}
|
||||
{
|
||||
roleCategory === 'global_custom' && (
|
||||
hasEditAction && (
|
||||
<DropdownMenuItem className="system-sm-semibold text-text-secondary" onClick={handleEdit}>
|
||||
Edit
|
||||
</DropdownMenuItem>
|
||||
)
|
||||
}
|
||||
{
|
||||
hasDuplicateAction && (
|
||||
<DropdownMenuItem className="system-sm-semibold text-text-secondary" onClick={handleDuplicate}>
|
||||
Duplicate
|
||||
</DropdownMenuItem>
|
||||
)
|
||||
}
|
||||
{
|
||||
hasDeleteAction && (
|
||||
<>
|
||||
<DropdownMenuItem className="system-sm-semibold text-text-secondary" onClick={handleEdit}>
|
||||
Edit
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem className="system-sm-semibold text-text-secondary" onClick={handleDuplicate}>
|
||||
Duplicate
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuItem variant="destructive" className="system-sm-semibold" onClick={handleDelete}>
|
||||
Delete
|
||||
|
||||
@ -64,6 +64,7 @@ export type Role = {
|
||||
description: string
|
||||
is_builtin: boolean
|
||||
permission_keys: PermissionKey[]
|
||||
role_tag: 'owner' | '' // Used for identifying the unique owner role, which has some special handlings
|
||||
}
|
||||
|
||||
export type Pagination = {
|
||||
@ -79,6 +80,10 @@ export type PaginationParameters = {
|
||||
reverse?: boolean
|
||||
}
|
||||
|
||||
export type RoleListRequest = PaginationParameters & {
|
||||
include_owner?: number
|
||||
}
|
||||
|
||||
export type RoleListResponse = {
|
||||
data: Role[]
|
||||
pagination: Pagination
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import type {
|
||||
CreateRoleRequest,
|
||||
PaginationParameters,
|
||||
Role,
|
||||
RoleListRequest,
|
||||
RoleListResponse,
|
||||
} from '@/models/access-control'
|
||||
import type { CommonResponse } from '@/models/common'
|
||||
@ -10,7 +10,7 @@ import { del, get, post, put } from '../base'
|
||||
|
||||
const NAME_SPACE = 'rbac-role-management'
|
||||
|
||||
export const useWorkspaceRoleList = (params?: PaginationParameters) => {
|
||||
export const useWorkspaceRoleList = (params: RoleListRequest) => {
|
||||
return useQuery({
|
||||
queryKey: [NAME_SPACE, 'workspace-role-list', params],
|
||||
queryFn: () => get<RoleListResponse>('/workspaces/current/rbac/roles', { params }),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user