feat: complete phase 02 RBAC and data scope recovery

This commit is contained in:
2026-09-10 10:58:43 +08:00
parent b46b48eb33
commit 5b51d5b3f1
115 changed files with 3608 additions and 1135 deletions
@@ -0,0 +1,55 @@
# Phase 02 Completion Report — 统一认证、RBAC、DataScope 与敏感访问
- 日期:2026-09-10
- 交付类型:内部迭代交付
- 项目类型:Web 管理系统 + 微信小程序后端
- 安全级别:普通商业项目(按公益婚恋敏感个人信息要求加强)
- 分支:`phase/02-rbac-datascope`
- 结论:**Phase 02 专项门禁通过;项目整体仍为 NO-GO,不自动进入 Phase 03。**
## 1. 测试范围
本阶段只验收统一身份主体、接口 Permission、服务 DataScope、敏感访问拒绝审计、管理端 Capability/权限入口控制及数据库迁移。性能、完整 UAT、生产发布和 Phase 03 以后业务不在本阶段范围。
## 2. 完成内容
1. 建立 `UserPrincipal`、`OperatorPrincipal` 与统一 JWT 认证上下文;Controller 不再自行解析 Authorization/JWT。
2. 删除旧 `PermissionFilter` 粗粒度实现;`/operator/**` 和 `/admin/**` 只做运营身份门禁,具体接口使用 `@PreAuthorize` 权限码。
3. 为不在 `/operator/**` 下的运营接口补齐方法权限,包括咨询、内容、服务预约、活动签到和红娘转介。
4. 实现并验证 Counselor Assigned Service、ServiceStationOperator 站点/任务范围、ContentEditor 零用户婚恋数据权限、组织关系不自动继承权限。
5. 权限拒绝写入审计;用户预约 `userId` 由 Principal 决定,修复可替他人创建/读取预约的 IDOR 风险。
6. 运营登录改为数据库密码散列校验,补充失败锁定、刷新和审计;移除硬编码测试密码通道。
7. 管理端路由、菜单和页面操作按服务端权限集合控制;前端隐藏仅作为体验层,后端仍强制校验。
8. 新增 V028/V029 前向迁移,补齐服务站数据范围及签到/协助登记权限。
## 3. 测试执行记录
| 测试项 | 结果 | 实测 |
|---|---|---|
| 后端编译 | 通过 | Maven `compile` exit 0 |
| Phase 02 专项/相关回归 | 通过 | 38 tests,0 failure,0 error,0 skipped |
| PostgreSQL 16 Flyway | 通过 | V001–V029 全部迁移成功,当前版本 V029 |
| 角色权限实库核对 | 通过 | counselor、counseling_manager、content_editor、service_station_operator 权限符合矩阵 |
| Admin TypeScript | 通过 | `npm run type-check` exit 0 |
| Admin Production Build | 通过 | `npm run build` exit 0;仅有既有大 chunk 警告 |
| Backend 全量回归 | 未全绿 | 277 tests:4 failures、8 errors、3 skipped |
专项用例覆盖正向授权、越权拒绝、行级范围、拒绝审计、Principal 注入、防止 Controller 回退解析 JWT、登录与健康检查。
## 4. 遗留缺陷与风险
| 等级 | 遗留项 | 处理建议 |
|---|---|---|
| 高 | `P0FixVerificationTest` 8 个错误:H2 测试环境缺少旧核心业务表 | 在后续基线修复阶段建立完整测试 schema;不得跳过或删除用例 |
| 中 | `MigrationValidationTest` 2 个旧文本断言与真实 V001–V029 迁移结构不一致 | 独立校正旧静态断言;真实 PostgreSQL Flyway 已通过 |
| 中 | `PermissionMatrixTest` 1 个旧平台管理员权限数量断言与其矩阵定义冲突 | 在后续权限测试基线任务中统一期望 |
| 中 | `SecurityTests` 1 个旧 XSS 输出编码断言未通过 | 后续按实际输出边界统一编码策略和断言 |
| 低 | Admin 主包约 1.26 MB,Vite 给出 chunk 警告 | 非 Phase 02 阻断;后续按页面拆包 |
以上遗留项未被隐藏,因此项目总体继续 NO-GO;它们不否定本阶段 RBAC/DataScope 专项门禁结果。
## 5. 验收结论
Phase 02 的代码、数据库、专项测试和管理端构建达到本阶段验收条件。正式客户 UAT、性能、安全渗透、备份恢复、部署演练和签字材料尚未执行,不得据此宣称 V1.1 可上线。
**下一步门禁:等待用户明确确认后,才可进入 Phase 03。**