From 5f9752f89ec351ddcf3354a060d1060e3d3568c7 Mon Sep 17 00:00:00 2001 From: wdc <20417204@qq.com> Date: Thu, 6 Aug 2026 16:02:51 +0800 Subject: [PATCH] fix(admin): expose AI settings navigation --- .../admin/capabilityAwareAdmin.test.tsx | 24 +++++++++++++++++++ .../AdminSectionNavigation.tsx | 10 ++++++++ src/admin/spotlight/commands/navigation.ts | 20 ++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/src/__tests__/admin/capabilityAwareAdmin.test.tsx b/src/__tests__/admin/capabilityAwareAdmin.test.tsx index 6bb500636..38f6bf00d 100644 --- a/src/__tests__/admin/capabilityAwareAdmin.test.tsx +++ b/src/__tests__/admin/capabilityAwareAdmin.test.tsx @@ -166,9 +166,33 @@ describe('capability-aware admin UI', () => { expect(screen.getByText('Content')).toBeDefined() expect(screen.queryByRole('link', { name: 'Site' })).toBeNull() expect(screen.queryByRole('link', { name: 'Plugins' })).toBeNull() + expect(screen.queryByRole('link', { name: 'AI' })).toBeNull() expect(screen.queryByRole('link', { name: 'Users' })).toBeNull() }) + it('shows AI settings navigation only to users who can access that workspace', () => { + const firstRender = render( + + + + + , + ) + + expect(screen.getByRole('link', { name: 'AI' }).getAttribute('href')).toBe('/admin/ai') + + firstRender.unmount() + render( + + + + + , + ) + + expect(screen.queryByRole('link', { name: 'AI' })).toBeNull() + }) + it('removes collection management and author reassignment for own-content editors', async () => { setupEditorState() const calls: Array<{ url: string; method: string }> = [] diff --git a/src/admin/shared/AdminSectionNavigation/AdminSectionNavigation.tsx b/src/admin/shared/AdminSectionNavigation/AdminSectionNavigation.tsx index 905913ae7..ba25f67bd 100644 --- a/src/admin/shared/AdminSectionNavigation/AdminSectionNavigation.tsx +++ b/src/admin/shared/AdminSectionNavigation/AdminSectionNavigation.tsx @@ -10,6 +10,7 @@ */ import { useEffect, useState, useSyncExternalStore, type MouseEvent, type ReactNode } from 'react' import { ArticleSolidIcon } from 'pixel-art-icons/icons/article-solid' +import { AiBoxSolidIcon } from 'pixel-art-icons/icons/ai-box-solid' import { DashboardSolidIcon } from 'pixel-art-icons/icons/dashboard-solid' import { DatabaseSolidIcon } from 'pixel-art-icons/icons/database-solid' import { ImagesSolidIcon } from 'pixel-art-icons/icons/images-solid' @@ -176,6 +177,15 @@ export function AdminSectionNavigation({ onNavigateStart={onWorkspaceNavigateStart} /> )} + {canAccess('ai') && ( +