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.
27 lines
1.6 KiB
27 lines
1.6 KiB
|
3 weeks ago
|
# Ticket 01: 权限码全集下发接口(前端按钮显隐数据源)
|
||
|
|
|
||
|
|
状态: 待排期 · 优先级: 前端联调阻塞项 · 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`(随登录会话缓存);无角色用户返回空集合;停用权限点不得出现。
|
||
|
|
|
||
|
|
## 验收
|
||
|
|
|
||
|
|
1. 登录后可拿到 permCodes 列表 + perms→denyBehavior 映射
|
||
|
|
2. 无角色用户 → permCodes 为空数组
|
||
|
|
3. 停用一个 button 权限点后重新登录,其 perms 不再出现
|
||
|
|
4. 单测覆盖上述三条
|
||
|
|
|
||
|
|
## 关联
|
||
|
|
|
||
|
|
ADR-0008(权限码体系延后)、ADR-0011(统一权限资源树)、ADR-0024(菜单粒度文档决策中「按钮显隐由前端权限点运行时控制」的前提)
|