fix(web): hydrate workspace permissions before navigation render (#39524)

This commit is contained in:
yyh
2026-07-24 09:06:57 +00:00
committed by GitHub
parent a2c67372ed
commit 4e85acc605
15 changed files with 218 additions and 89 deletions
+1 -1
View File
@@ -173,7 +173,7 @@ export const createConsoleQueryWrapper = (
}
if (options.workspacePermissionKeys !== null) {
if (options.workspacePermissionKeys)
seedWorkspacePermissionsQuery(queryClient, 'workspace-1', options.workspacePermissionKeys)
seedWorkspacePermissionsQuery(queryClient, options.workspacePermissionKeys)
else ensureWorkspacePermissionsQuery(queryClient)
}
const systemFeatures =
+12 -9
View File
@@ -1,10 +1,14 @@
import type { MyPermissionsResponse } from '@dify/contracts/api/console/workspaces/types.gen'
import type { QueryClient } from '@tanstack/react-query'
import type { PermissionKeysResponse } from '@/models/access-control'
import { workspacePermissionKeysQueryOptions } from '@/service/access-control/use-permission-keys'
const currentWorkspacePermissionsQueryKey = [
['console', 'workspaces', 'current', 'rbac', 'myPermissions', 'get'],
{ type: 'query' },
] as const
const createWorkspacePermissionsFixture = (
permissionKeys: readonly string[] = [],
): PermissionKeysResponse => ({
): MyPermissionsResponse => ({
workspace: {
permission_keys: [...permissionKeys],
},
@@ -20,23 +24,22 @@ const createWorkspacePermissionsFixture = (
export const seedWorkspacePermissionsQuery = (
queryClient: QueryClient,
workspaceId = 'workspace-1',
permissionKeys: readonly string[] = [],
) => {
const data = createWorkspacePermissionsFixture(permissionKeys)
queryClient.setQueryData(workspacePermissionKeysQueryOptions(workspaceId).queryKey, data)
queryClient.setQueryData(currentWorkspacePermissionsQueryKey, data)
return data
}
export const ensureWorkspacePermissionsQuery = (
queryClient: QueryClient,
workspaceId = 'workspace-1',
permissionKeys: readonly string[] = [],
) => {
const queryKey = workspacePermissionKeysQueryOptions(workspaceId).queryKey
const existingPermissions = queryClient.getQueryData<PermissionKeysResponse>(queryKey)
const existingPermissions = queryClient.getQueryData<MyPermissionsResponse>(
currentWorkspacePermissionsQueryKey,
)
if (existingPermissions === undefined)
return seedWorkspacePermissionsQuery(queryClient, workspaceId, permissionKeys)
return seedWorkspacePermissionsQuery(queryClient, permissionKeys)
return existingPermissions
}