菜单与路由
# 菜单与路由
后台侧栏使用两级菜单。「工作台」「个人中心」保持一级固定入口,业务页面归入可展开的一级分组。登录后点击分组标题展开,再点击二级页面进入;直接访问二级页面、刷新或浏览器前进/后退时,所属分组自动展开,当前页面保持高亮。
| 后台 | 一级分组 | 二级页面(完整已发布目录,实际按权限显示) |
|---|---|---|
| 租户 | 系统管理 | 权限目录、部门管理、岗位管理、用户管理、角色管理、安全策略、操作审计、登录日志 |
| 租户 | 身份管理 | 会员账号、服务账号、外部身份绑定、账号认证模式 |
| 租户 | 基础设施 | 字典管理、参数配置、文件管理、定时任务 |
| 租户 | 消息通知 | 通知模板、通知发送记录、我的通知 |
| 租户 | 开发示例 | 示例组件 |
| 平台 | 租户与套餐 | 租户管理、套餐管理 |
| 平台 | 身份与登录 | 身份客户端、OIDC提供方、平台外部绑定、平台认证模式 |
| 平台 | 平台基础设施 | 公共字典与模板、平台业务参数、租户默认参数模板、平台系统任务 |
| 平台 | 审计与权限 | 平台权限目录、平台操作审计 |
分组只整理当前账号已获授权的页面,不授予新权限。套餐未开通或角色未授权的页面不会显示;一个分组没有可见子项时整个分组隐藏。组内保留服务端排序,权限变更会同时更新菜单与展开状态。新登记但尚未分类的已授权页面暂放「其他功能」;这不绕过组件白名单。官方搜索与混合导航选中一级分组时,经本地分组路径重定向到首个已授权页面;清理授权时同时删除这些重定向,不新增菜单权限或数据库记录。
例如,具备文件读取权限且套餐已开通文件能力的账号可以按下列步骤进入;没有这些条件时不显示文件入口,直输 URL 仍受既有路由与后端权限检查约束:
租户后台 → 基础设施 → 文件管理 → /infra/files
页面所需权限:infra:file:read
刷新 /infra/files:自动展开“基础设施”,高亮“文件管理”
仅授权文件页面:只显示“基础设施 → 文件管理”和两个固定入口
登录并完成改密后,前端并行读取 me、codes 和 menus。三份数据的 X-Authz-Version 一致时,才按本地白名单注册动态路由。版本不一致最多重取一次,仍不一致则不安装半套菜单。
服务端菜单里的组件键必须已经写在 fago/fago-vben5/apps/web-antd/src/router/manifest.ts。未登记的键、路径和组件不匹配、保留路径,以及平台身份进入租户页面,都不会注册。以下为系统页面的路径示例,完整白名单以该文件为准:
| 组件键 | 租户路径 | 平台路径 |
|---|---|---|
/platform/infra/dictionaries/index | 无 | /platform/infra/dictionaries |
/platform/infra/configs/index | 无 | /platform/infra/configs |
/platform/infra/config-templates/index | 无 | /platform/infra/config-templates |
/platform/infra/jobs/index | 无 | /platform/infra/jobs |
/system/access/index | /system/access | /platform/access |
/system/departments/index | /system/departments | 无 |
/system/posts/index | /system/posts | 无 |
/system/users/index | /system/users | 无 |
/system/roles/index | /system/roles | 无 |
/system/security-policy/index | /system/security-policy | 无 |
/system/audit-logs/index | /system/audit-logs | 无 |
/system/login-logs/index | /system/login-logs | 无 |
access token、权限码和动态路由只放在内存。启动时清掉 localStorage 和 sessionStorage 里旧的 core-access 与 token 键。
同一标签页不做两种身份。退出或身份变化只在同一 realm 内广播,不广播 token。授权版本变化时清空旧动态路由再加载。旧请求晚到时,不能覆盖已经建立的新身份。
没有 Web Locks 的浏览器会禁用自动恢复和自动刷新,并提示重新登录。
新增页面时,要同时登记组件和路径,并让服务端菜单使用同一个组件键。不要从接口返回远程组件地址。
本地分组规则位于 fago/fago-vben5/apps/web-antd/src/router/menu-groups.ts,src/router/vben-menus.ts 把已注册叶节点适配成官方菜单树;src/layouts/basic.vue 使用官方 BasicLayout 展示导航,不再维护简版侧栏。维护新页面时可把其实际路径加入对应分组;这些文件不能替代后端授权目录或动态路由白名单。会话管理继续位于工作台,修改本人密码从个人中心或右上角账号菜单进入。
打开业务页面时,原生标签栏记录当前页面;退出、账号/realm 切换或权威授权版本改变会清理旧标签与页面缓存,正常 access 轮换不会丢失同身份标签。菜单与标签不持久化;重新加载后由当前身份的服务端快照重建。
服务端菜单 component 键须登记在 router/manifest.ts 白名单(示例):
// fago/fago-vben5/apps/web-antd/src/router/manifest.ts
'/system/security-policy/index': SecurityPolicy,