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