M1 自拆解简报 · security(数据安全)
粗粒度里程碑简报。只读本简报 + 本仓代码即可自拆子任务并自验收,无需问人。
上位总纲:主仓 docs/milestones/M1-单命名空间端到端贯通.md。
0. 一句话目标
保持服务可起、probe 绿、可容器化入单 ns;数据权限只做最小骨架(行级兜底 + 库表级角色门),完整 SC-6 行/列裁决明确后置——避免早期把资产可见性硬塞进模块 RBAC 而返工。
1. 起点 · 代码现状
- 栈:Java17 / Spring Boot 3.3.5 / PostgreSQL + Flowable(已接线,无 BPMN 流程)。
- 已有(真实脚手架):
ProbeController GET /api/security/probe;/actuator/health;CLAUDE.md 契约块已在(consumer ×4)。本地 docker-compose.local.yml(PG)。默认端口 8080。
- 缺失:业务 controller(仅 probe);无
server.port。
2. 范围边界
- ✅ M1:probe 绿 + 容器化 + 端口规整;落「行级兜底 + 库表级角色门」的最小占位(可仅文档化接入点 + 一个示例策略)。
- ⛔ 不做:完整 SC-6 主体×对象×动作×约束裁决引擎、行/列计划、动态脱敏全量、审批 BPMN。
3. 工作项 & 拆分指引
WP1 服务入口级达标
- 端口
${SERVER_PORT:8083} / ${MANAGEMENT_SERVER_PORT:9083};readiness deps-optional 绿;CI 推 ghcr.io/hashmatrixdata/security:<semver>。
WP2 数据权限最小骨架(防返工)
- 要达成:明确 M1 的资产可见性 = libs
starter-tenant 行级兜底(已实现,优先级最高不可绕过)+ 按 Keycloak 角色的库表级门;SC-6 完整裁决后置。
- 入手点:阅读并落档拦截链顺序「①行级兜底 → ②SC-6 → ③列管控 → ④脱敏」;M1 仅占位 ② // TODO,给一个示例「角色→可见库表」映射。
- 参考:
prototype/docs/07-数据安全/03-统一数据权限(自研).md(§8 拦截链、§授权对象=元类实例)。
- 验收:文档+代码注释清晰标出 SC-6 接入点;不与模块 RBAC 混淆(功能权限走
@PreAuthorize,数据权限走数据层)。
4. 关键参考
- SC-6 设计:
prototype/docs/07-数据安全/03-统一数据权限(自研).md;libs starter-tenant(行级兜底)、starter-security(@PreAuthorize)。
5. 依赖 & 约束
- 端口 8083/9083;受 D6(M1 身份/权限就低不就高)约束。
6. 完成判据
M1 自拆解简报 · security(数据安全)
0. 一句话目标
保持服务可起、probe 绿、可容器化入单 ns;数据权限只做最小骨架(行级兜底 + 库表级角色门),完整 SC-6 行/列裁决明确后置——避免早期把资产可见性硬塞进模块 RBAC 而返工。
1. 起点 · 代码现状
ProbeControllerGET /api/security/probe;/actuator/health;CLAUDE.md契约块已在(consumer ×4)。本地docker-compose.local.yml(PG)。默认端口 8080。server.port。2. 范围边界
3. 工作项 & 拆分指引
WP1 服务入口级达标
${SERVER_PORT:8083}/${MANAGEMENT_SERVER_PORT:9083};readiness deps-optional 绿;CI 推ghcr.io/hashmatrixdata/security:<semver>。WP2 数据权限最小骨架(防返工)
starter-tenant行级兜底(已实现,优先级最高不可绕过)+ 按 Keycloak 角色的库表级门;SC-6 完整裁决后置。prototype/docs/07-数据安全/03-统一数据权限(自研).md(§8 拦截链、§授权对象=元类实例)。@PreAuthorize,数据权限走数据层)。4. 关键参考
prototype/docs/07-数据安全/03-统一数据权限(自研).md;libsstarter-tenant(行级兜底)、starter-security(@PreAuthorize)。5. 依赖 & 约束
6. 完成判据