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

2.5 KiB
Raw Blame History

操作日志:平台角色菜单树与授权导航修复

操作时间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 警告;修正后无新增控制台警告。
  • 当前平台账户列表没有普通角色账号,因此未创建临时数据,也未执行普通账号真实登录;该链路由后端授权测试和前端登录落点检查覆盖。