Files
platforms/docs/操作日志_平台角色菜单树与授权导航修复_20260817.md

42 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 操作日志:平台角色菜单树与授权导航修复
操作时间2026-08-17
操作类型:修改
影响模块:平台总后台角色菜单、平台账号登录导航、服务端菜单鉴权
## 操作前状态
- 角色菜单使用扁平多选框,父菜单与叶子菜单看似可以独立选择。
- 服务端实际只保存叶子菜单,导致父菜单勾选不落库、子菜单选中时父菜单不显示半选。
- 普通账号取得个人菜单编码后仍需读取 `/platform_menu`,但该请求又要求“平台菜单”业务权限,形成权限死循环并错误进入无权限页。
## 具体操作
- 新增专用角色菜单树,父菜单支持全选、全清和半选展示,子菜单显示完整路径。
- 表单只提交叶子菜单;允许清空全部权限,并在提交前二次警告。
- 放行已认证平台账号读取当前角色自己的菜单列表,响应继续按角色过滤;菜单详情和写操作不放宽。
- 服务端忽略具有子菜单的导航父节点,同时保留无子菜单顶级页面作为有效业务权限。
- 补充后端访问规则测试和前端静态契约检查。
## 行为变化
- 修改前:父子菜单状态不一致,普通业务角色可能已分配权限但无法加载导航。
- 修改后:父菜单只表达叶子权限的聚合状态;普通账号可加载自己的授权导航,未授权兄弟菜单仍不可见、不可访问。
## 风险评估
- 不修改数据库结构和公共写接口,历史叶子数据继续兼容。
- `GET /platform_menu` 仅放宽为“读取自身授权导航”,服务端仍根据 JWT 角色过滤,不开放详情和写权限。
- 清空权限会使该角色账号无法进入业务页,前端已增加明确确认提示。
## 验证结果
- 后端 `go test ./internal/logic/platform/platform ./internal/logic/platform ./internal/routers`:通过。
- 前端 `pnpm run menu-permission-tree:check`:通过。
- 前端 `pnpm run auth-landing:check`:通过。
- 前端 `pnpm run type:check`:通过。
- 前端 `pnpm run build`:通过。
- Codex 浏览器人工验证:父级半选、全选、全清、完整路径搜索和清空权限二次确认均通过;测试过程已取消弹窗,未写入角色权限。
- 浏览器复验修正了菜单数据返回前数组未初始化的瞬时 Vue 警告;修正后无新增控制台警告。
- 当前平台账户列表没有普通角色账号,因此未创建临时数据,也未执行普通账号真实登录;该链路由后端授权测试和前端登录落点检查覆盖。