diff --git a/frontend/src/components/Layout/SideNav.jsx b/frontend/src/components/Layout/SideNav.jsx
index 1782193..c21b2d0 100644
--- a/frontend/src/components/Layout/SideNav.jsx
+++ b/frontend/src/components/Layout/SideNav.jsx
@@ -8,19 +8,34 @@ import {
UserOutlined,
TeamOutlined,
} from '@ant-design/icons'
-
-const menuItems = [
- { key: '/dashboard', icon: , label: '仪表盘' },
- { key: '/tps', icon: , label: 'TPS 选题策划' },
- { key: '/knowledge', icon: , label: '知识库' },
- { key: '/doco', icon: , label: '文稿对齐' },
- { key: '/editor-home', icon: , label: '个人首页' },
- { key: '/users', icon: , label: '用户管理' },
-]
+import useAuthStore from '../../stores/authStore'
function SideNav() {
const navigate = useNavigate()
const location = useLocation()
+ const { user } = useAuthStore()
+
+ const allMenuItems = [
+ { key: '/dashboard', icon: , label: '仪表盘' },
+ { key: '/editor-desk', icon: , label: '责编录入' },
+ { key: '/tps', icon: , label: 'TPS 选题策划' },
+ { key: '/knowledge', icon: , label: '知识库' },
+ { key: '/doco', icon: , label: '文稿对齐' },
+ { key: '/editor-home', icon: , label: '个人首页' },
+ { key: '/users', icon: , label: '用户管理' },
+ ]
+
+ // 按角色过滤菜单项
+ const visibleItems = allMenuItems.filter(item => {
+ // /dashboard 三角色都可见
+ if (item.key === '/dashboard') return true
+ // /users 仅 zhipianren
+ if (item.key === '/users') return user?.role === 'zhipianren'
+ // /editor-desk 仅 zhipianren + zebian
+ if (item.key === '/editor-desk') return user?.role === 'zhipianren' || user?.role === 'zebian'
+ // 其余三角色都可见(保留后期 Phase 入口)
+ return true
+ })
return (
@@ -31,7 +46,7 @@ function SideNav() {