mirror of
https://github.com/langgenius/dify.git
synced 2026-07-28 07:28:34 +08:00
Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: fatelei <fatelei@gmail.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: 盐粒 Yanli <yanli@dify.ai> Co-authored-by: Charles Yao <chongbinyao33@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: yunlu.wen <yunlu.wen@dify.ai> Co-authored-by: yyh <92089059+lyzno1@users.noreply.github.com> Co-authored-by: Jingyi <jingyi.qi@dify.ai> Co-authored-by: yyh <yuanyouhuilyz@gmail.com> Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: hjlarry <hjlarry@163.com> Co-authored-by: Asuka Minato <i@asukaminato.eu.org> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Xiyuan Chen <52963600+GareArc@users.noreply.github.com> Co-authored-by: gigglewang <gigglewang@dify.ai> Co-authored-by: chariri <w@chariri.moe> Co-authored-by: Evan <2869018789@qq.com> Co-authored-by: zyssyz123 <916125788@qq.com>
140 lines
4.7 KiB
TypeScript
140 lines
4.7 KiB
TypeScript
import type {
|
|
AccessPolicy,
|
|
AccessPolicyResourceType,
|
|
CreateAccessPolicyRequest,
|
|
GetAppAccessPoliciesResponse,
|
|
GetDatasetAccessPoliciesResponse,
|
|
UpdateAccessPolicyRequest,
|
|
WorkspaceAccessRulesRequest,
|
|
} from '@/models/access-control'
|
|
import type { CommonResponse } from '@/models/common'
|
|
import { useInfiniteQuery, useMutation, useQueryClient } from '@tanstack/react-query'
|
|
import { del, get, post, put } from '../base'
|
|
|
|
const NAME_SPACE = 'workspace-access-rules'
|
|
|
|
type WorkspaceAccessRulesQueryParams = Omit<WorkspaceAccessRulesRequest, 'page'>
|
|
|
|
const workspaceAccessRulesQueryKeys = {
|
|
app: (params?: WorkspaceAccessRulesQueryParams) => params ? [NAME_SPACE, 'app', params] as const : [NAME_SPACE, 'app'] as const,
|
|
dataset: (params?: WorkspaceAccessRulesQueryParams) => params ? [NAME_SPACE, 'dataset', params] as const : [NAME_SPACE, 'dataset'] as const,
|
|
}
|
|
|
|
export const useInfiniteWorkspaceAppAccessRules = (params: WorkspaceAccessRulesRequest = {}) => {
|
|
const { page = 1, ...queryParams } = params
|
|
|
|
return useInfiniteQuery({
|
|
queryKey: workspaceAccessRulesQueryKeys.app(queryParams),
|
|
queryFn: ({ pageParam }) => get<GetAppAccessPoliciesResponse>('/workspaces/current/rbac/workspace/apps/access-policy', {
|
|
params: {
|
|
...queryParams,
|
|
page: pageParam,
|
|
},
|
|
}),
|
|
initialPageParam: page,
|
|
getNextPageParam: (lastPage) => {
|
|
const { current_page, total_pages } = lastPage.pagination
|
|
|
|
if (current_page < total_pages)
|
|
return current_page + 1
|
|
|
|
return undefined
|
|
},
|
|
})
|
|
}
|
|
|
|
export const useInfiniteWorkspaceDatasetAccessRules = (params: WorkspaceAccessRulesRequest = {}) => {
|
|
const { page = 1, ...queryParams } = params
|
|
|
|
return useInfiniteQuery({
|
|
queryKey: workspaceAccessRulesQueryKeys.dataset(queryParams),
|
|
queryFn: ({ pageParam }) => get<GetDatasetAccessPoliciesResponse>('/workspaces/current/rbac/workspace/datasets/access-policy', {
|
|
params: {
|
|
...queryParams,
|
|
page: pageParam,
|
|
},
|
|
}),
|
|
initialPageParam: page,
|
|
getNextPageParam: (lastPage) => {
|
|
const { current_page, total_pages } = lastPage.pagination
|
|
|
|
if (current_page < total_pages)
|
|
return current_page + 1
|
|
|
|
return undefined
|
|
},
|
|
})
|
|
}
|
|
|
|
export const useCreateAccessRule = () => {
|
|
const queryClient = useQueryClient()
|
|
|
|
return useMutation({
|
|
mutationKey: [NAME_SPACE, 'create'],
|
|
mutationFn: (data: CreateAccessPolicyRequest & { resourceType: AccessPolicyResourceType }) => {
|
|
const { name, description, permission_keys, resourceType } = data
|
|
return post<AccessPolicy>('/workspaces/current/rbac/access-policies', {
|
|
body: {
|
|
resource_type: resourceType,
|
|
name,
|
|
description,
|
|
permission_keys,
|
|
},
|
|
})
|
|
},
|
|
onSuccess: (_, { resourceType }) => {
|
|
queryClient.invalidateQueries({ queryKey: resourceType === 'app' ? workspaceAccessRulesQueryKeys.app() : workspaceAccessRulesQueryKeys.dataset() })
|
|
},
|
|
})
|
|
}
|
|
|
|
export const useUpdateAccessRule = () => {
|
|
const queryClient = useQueryClient()
|
|
|
|
return useMutation({
|
|
mutationKey: [NAME_SPACE, 'update'],
|
|
mutationFn: (data: UpdateAccessPolicyRequest & { resourceType: AccessPolicyResourceType }) => {
|
|
const { id, name, description, permission_keys } = data
|
|
return put<AccessPolicy>(`/workspaces/current/rbac/access-policies/${id}`, {
|
|
body: {
|
|
id,
|
|
name,
|
|
description,
|
|
permission_keys,
|
|
},
|
|
})
|
|
},
|
|
onSuccess: (_, { resourceType }) => {
|
|
queryClient.invalidateQueries({ queryKey: resourceType === 'app' ? workspaceAccessRulesQueryKeys.app() : workspaceAccessRulesQueryKeys.dataset() })
|
|
},
|
|
})
|
|
}
|
|
|
|
export const useCopyAccessRule = (resourceType: AccessPolicyResourceType) => {
|
|
const queryClient = useQueryClient()
|
|
|
|
return useMutation({
|
|
mutationKey: [NAME_SPACE, 'copy', resourceType],
|
|
mutationFn: (id: string) => {
|
|
return post<AccessPolicy>(`/workspaces/current/rbac/access-policies/${id}/copy`, {})
|
|
},
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: resourceType === 'app' ? workspaceAccessRulesQueryKeys.app() : workspaceAccessRulesQueryKeys.dataset() })
|
|
},
|
|
})
|
|
}
|
|
|
|
export const useDeleteAccessRule = (resourceType: AccessPolicyResourceType) => {
|
|
const queryClient = useQueryClient()
|
|
|
|
return useMutation({
|
|
mutationKey: [NAME_SPACE, 'delete', resourceType],
|
|
mutationFn: (id: string) => {
|
|
return del<CommonResponse>(`/workspaces/current/rbac/access-policies/${id}`, {})
|
|
},
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: resourceType === 'app' ? workspaceAccessRulesQueryKeys.app() : workspaceAccessRulesQueryKeys.dataset() })
|
|
},
|
|
})
|
|
}
|