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
@@ -153,6 +153,32 @@ vi.mock('@/service/client', () => ({
...options,
}),
},
rbac: {
myPermissions: {
get: {
queryOptions: () => ({
queryKey: ['current-permissions'],
queryFn: async () => {
if (mockPermissionKeysState.isPending) return new Promise(() => {})
return {
workspace: {
permission_keys: mockPermissionKeysState.permissionKeys,
},
app: {
default_permission_keys: [],
overrides: [],
},
dataset: {
default_permission_keys: [],
overrides: [],
},
}
},
}),
},
},
},
},
},
version: {
@@ -354,24 +380,6 @@ describe('Console bootstrap', () => {
can_auto_update: false,
}
mockGetRequest.mockImplementation((url: string) => {
if (url === '/workspaces/current/rbac/my-permissions') {
if (mockPermissionKeysState.isPending) return new Promise(() => {})
return Promise.resolve({
workspace: {
permission_keys: mockPermissionKeysState.permissionKeys,
},
app: {
default_permission_keys: [],
overrides: [],
},
dataset: {
default_permission_keys: [],
overrides: [],
},
})
}
if (url === '/version') return Promise.resolve(mockLangGeniusVersionState.data)
return Promise.reject(new Error(`Unexpected GET ${url}`))
+4 -7
View File
@@ -2,15 +2,12 @@
import { atom } from 'jotai'
import { atomWithQuery } from 'jotai-tanstack-query'
import { workspacePermissionKeysQueryOptions } from '@/service/access-control/use-permission-keys'
import { consoleQuery } from '@/service/client'
import { emptyWorkspacePermissionKeys } from './app-context-normalizers'
import { currentWorkspaceIdAtom } from './workspace-state'
const workspacePermissionKeysQueryAtom = atomWithQuery((get) => {
const workspaceId = get(currentWorkspaceIdAtom)
return workspacePermissionKeysQueryOptions(workspaceId)
})
const workspacePermissionKeysQueryAtom = atomWithQuery(() =>
consoleQuery.workspaces.current.rbac.myPermissions.get.queryOptions(),
)
export const workspacePermissionKeysAtom = atom((get) => {
return (