Tanplate Docs
网站配置

侧边栏菜单

配置 Admin Sidebar 的分组、角色可见性和可选模块入口。

用户站当前没有仪表盘侧边栏;“侧边栏菜单”指 Admin 应用壳:

apps/admin/src/pages/_app/-components/app-shell-sidebar.tsx

导航结构

SIDEBAR_NAVIGATION 由 section 和 item 组成:

type SidebarNavigationItem = {
  icon: string
  label: string
  requiresRole?: AppRole
  to: SidebarNavigationTo
}

type SidebarNavigationSection = {
  items: SidebarNavigationItem[]
  label: string
}

当前 Workspace 分组包含 Radar,以及按 Manifest 注册的 Projects、User Assets、Analytics、Newsletter 管理入口。用户管理始终存在,因为 Admin 自身要求 Authentication。

角色可见性

需要管理员权限的入口声明 requiresRole: 'admin',渲染前由真实 AuthSnapshothasRole() 过滤。

导航隐藏不是授权

requiresRole 只控制可见性。所有 /api/admin/* Route 仍必须在任何 D1/R2 读取前验证 Session、邮箱状态、ban、持久化 role 和逐操作 permission。

Capability gate

可选模块入口直接读取 PUBLIC_PROJECT_CONFIG.features 或对应应用配置常量。不要保留一个指向未生成 route 的灰色菜单项;能力关闭时,入口与 route 应一起从产物移除。

默认落地页

Sidebar 第一项使用 DEFAULT_APP_ROUTE。修改登录后的落地页时,在 apps/admin/src/config/app.ts 更新唯一常量,并让 Sidebar 第一项继续引用它;不要维护两个字符串。

图标与文案

  • 图标使用 i-solar-* / i-carbon-* class。
  • 文案使用 Admin 严格消息目录 t('navigation.*')
  • 折叠状态下必须保留 Tooltip。
  • 新 route 要加入 SidebarNavigationTo 联合类型。

折叠状态

折叠状态由 apps/admin/src/stores/app.ts 持久化。它只保存非敏感 UI 偏好,不保存 Session 或 token。

验证

pnpm --filter admin typecheck
pnpm --filter admin test
pnpm test:e2e:admin

至少覆盖普通用户与管理员可见性、当前路由高亮、折叠 Tooltip,以及模块关闭后的导航裁剪。

On this page