mirror of
https://github.com/langgenius/dify.git
synced 2026-08-02 02:40:43 +08:00
47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import type { SelectorKey } from 'i18next'
|
|
import { useQuery } from '@tanstack/react-query'
|
|
import { useMemo } from 'react'
|
|
import { useTranslation } from 'react-i18next'
|
|
import { consoleQuery } from '@/service/client'
|
|
|
|
export const useWorkspacePermissionGroups = () => {
|
|
const { t } = useTranslation()
|
|
const { data: workspacePermissionCatalog } = useQuery(
|
|
consoleQuery.workspaces.current.rbac.rolePermissions.catalog.get.queryOptions({
|
|
input: {},
|
|
}),
|
|
)
|
|
|
|
const groups = useMemo(() => {
|
|
// Permission keys come from the catalog API, so these are reviewed open-key boundaries with server-provided fallbacks.
|
|
const translatePermissionGroupName = (groupKey: string, defaultValue: string) =>
|
|
t(`group.${groupKey}` as SelectorKey, {
|
|
ns: 'permission',
|
|
defaultValue,
|
|
})
|
|
const translatePermissionName = (key: string, defaultValue: string) =>
|
|
t(key as SelectorKey, {
|
|
ns: 'permissionKeys',
|
|
defaultValue,
|
|
})
|
|
|
|
return (workspacePermissionCatalog?.groups ?? []).map((group) => ({
|
|
...group,
|
|
group_name: translatePermissionGroupName(group.group_key, group.group_name),
|
|
permissions: (group.permissions ?? []).map((permission) => ({
|
|
...permission,
|
|
name: translatePermissionName(permission.key, permission.name),
|
|
})),
|
|
}))
|
|
}, [t, workspacePermissionCatalog?.groups])
|
|
|
|
const allPermissions = groups.flatMap((g) => g.permissions)
|
|
|
|
const permissionMap = Object.fromEntries(allPermissions.map((p) => [p.key, p]))
|
|
|
|
return {
|
|
groups,
|
|
permissionMap,
|
|
}
|
|
}
|