You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

2.5 KiB

Ticket 01: 权限码全集下发接口(前端按钮显隐数据源)

状态: 已完成(2026-08-17 实现)· 优先级: 前端联调阻塞项 · 2026-08-14 用户决策:模式 2(全集下发),不采用逐次问询式

背景

  • PermissionGrant.getPermCodes() 登录时已算出用户权限码并集(button 且 status=enabled 的 perms 去重,ADR-0011),但只喂给后端 ApiPermissionInterceptor(URL→perms 匹配,无权限 403),没有任何 HTTP 接口把它交给前端
  • /me/menus/tree 返回菜单树时均过滤掉 BUTTON 节点(PermissionResolverImpl#visibleMenuTree),前端无法得知自己有哪些权限码。
  • ADR-0008 延后的权限码体系缺前端半边;前端按钮显隐(hide / disable)当前无数据依据,权限码命名前后端靠口头约定对齐——错在哪边都查不清。

需求

  • 登录后前端可一次性获取:permCodes 全集 + 每个 perms 的 denyBehavior(hide / disable)。
  • 实现位置二选一(实现时定):/me 的 userInfo 增加字段(登录必调、零额外请求,推荐);或新端点 GET /api/auth/perms
  • 数据源:PermissionGrant(每请求实时 resolve,停用权限点全局断路);无角色用户返回空集合;停用权限点不得出现。

验收

  1. 登录后可拿到 permCodes 列表 + perms→denyBehavior 映射
  2. 无角色用户 → permCodes 为空数组
  3. 停用一个 button 权限点后重新登录,其 perms 不再出现
  4. 单测覆盖上述三条

关联

ADR-0008(权限码体系延后)、ADR-0011(统一权限资源树)、ADR-0024(菜单粒度文档决策中「按钮显隐由前端权限点运行时控制」的前提)

Comments

  • 2026-08-17 实现:选 /me 增字段方案(工单推荐)。UserInfoDTO 新增 permCodes + denyBehaviors(perms→denyBehavior 映射),AuthServiceImpl.getCurrentUserInfo()PermissionResolver.resolve() 填充;PermissionGrant 新增 getDenyBehaviors(),与权限码并集同源同断路。
  • 前提更正:本仓库不存在 grant 会话缓存,JwtAuthenticationFilter 每请求实时 resolve;因此验收 3 无需重登即生效(更强保证)。
  • 边界规则:denyBehavior 未配置按 hide 兜底;同一 perms 多按钮行为冲突时取 disable(更保守)。
  • 验收 1–4 全部覆盖:DataScopeIntegrationTest(多角色合并/停用断路/无角色空/兜底/冲突裁决)+ AuthServiceImplTest(/me 下发、空集合非 null)。