# 05 — 权限码并集注入(按钮级鉴权) **What to build:** 用户登录后,`PermissionServiceImpl.initDataScopeContext` 在计算数据范围时顺带计算权限码并集——查用户所有角色授权的按钮节点(`type=button 且 status=enabled`),收集各节点的 `perms` 字符串,与 `roleCode` 一起填入 Spring Security authority。停用的权限点(`status=disabled`)不进并集——全局断路,无需逐角色取消授权。重新启用后原授权自动恢复。 **Blocked by:** 01(需要 SysMenu 的 perms/status 字段 + MenuType 枚举)。 **Status:** ready-for-agent - [ ] `initDataScopeContext` 在现有数据范围计算后追加权限码并集:查 `sys_user_role` → `sys_role_menu` → `sys_menu`(过滤 `menuType=3 且 status='enabled'`)→ 收集 `perms` 去重 - [ ] 权限码(`perms`)与角色码(`roleCode`)一起填入 `SecurityUtils.getAuthorities()`,使 `@PreAuthorize("hasAuthority('crm:xxx:yyy')")` 可用 - [ ] 停用的权限点(status=disabled):即使角色已授权,perms 不进并集 - [ ] 重新启用后(status=enabled):perms 自动恢复进并集,无需管理员重新勾选 - [ ] 现有 `JwtAuthenticationFilter` 的 authority 注入逻辑不退化 - [ ] TDD 测试覆盖:有按钮权限时 authority 含 perms、停用按钮不进并集、重新启用恢复