feat: SideNav 按 role 过滤菜单,/users 仅 zhipianren,/editor-desk 仅 zhipianren+zebian

This commit is contained in:
simonkoson
2026-05-21 19:47:21 +08:00
parent 3942f01def
commit 4eca31f8eb
+20 -5
View File
@@ -8,9 +8,16 @@ import {
UserOutlined,
TeamOutlined,
} from '@ant-design/icons'
import useAuthStore from '../../stores/authStore'
const menuItems = [
function SideNav() {
const navigate = useNavigate()
const location = useLocation()
const { user } = useAuthStore()
const allMenuItems = [
{ key: '/dashboard', icon: <DashboardOutlined />, label: '仪表盘' },
{ key: '/editor-desk', icon: <FileTextOutlined />, label: '责编录入' },
{ key: '/tps', icon: <FileTextOutlined />, label: 'TPS 选题策划' },
{ key: '/knowledge', icon: <BookOutlined />, label: '知识库' },
{ key: '/doco', icon: <SyncOutlined />, label: '文稿对齐' },
@@ -18,9 +25,17 @@ const menuItems = [
{ key: '/users', icon: <TeamOutlined />, label: '用户管理' },
]
function SideNav() {
const navigate = useNavigate()
const location = useLocation()
// 按角色过滤菜单项
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 (
<div className="side-nav">
@@ -31,7 +46,7 @@ function SideNav() {
<Menu
mode="inline"
selectedKeys={[location.pathname]}
items={menuItems}
items={visibleItems}
onClick={({ key }) => navigate(key)}
className="side-nav-menu"
/>