Files
leaudit-platform-backend/docs/权限与地区隔离/新平台主链路租户改造实施任务单.md

6.2 KiB

新平台主链路租户改造实施任务单

目标:把新平台主链路从“半租户化”推进到“关键链路 tenant-first”
当前优先级:先修会落错数据、查错范围、跨租户误改的链路


T1 文档上传 tenant-first 收口

数据库变更

  • 无强制新表
  • 如当前库中还没有文档业务快照字段,需要补充:
    • leaudit_documents.root_group_id
    • leaudit_documents.entry_module_id

后端改造

  • Upload 改为显式以 tenant_code 为主,不再依赖 region 主导归属
  • 上传时校验:
    • group_id 必须属于 document_type_id
    • group_id 必须属于当前入口模块业务树
    • group_id 必须属于当前租户允许范围
  • 上传落库时持久化:
    • tenant_code
    • group_id
    • root_group_id
    • entry_module_id

前端改造

  • 上传页显式提交 tenant_code
  • 上传页不再仅传 region
  • 上传页当前租户显式展示

验收点

  • 同一文档类型、不同租户上传,不会再混入同一版本链
  • 上传请求缺少 tenant_code 时,行为明确可控
  • 非当前租户二级组 ID 无法上传成功

风险

  • 历史旧文档若仍无 tenant_code,需要兼容迁移窗口

T2 文档列表/详情停止 tenant_code + region 混查

数据库变更

  • 如缺索引,确认:
    • idx_leaudit_documents_tenant_code
    • idx_leaudit_documents_group_id

后端改造

  • 收紧 _document_tenant_filter_sql
  • 收紧 _buildDocumentScopeFilters
  • 收紧 _find_latest_version_candidate
  • 停止危险的“tenant_code 不命中就退回 region

前端改造

  • 文档列表请求显式带 tenant_code
  • 列表页显示当前租户范围

验收点

  • 同地区旧数据不会再被当成当前租户数据读出来
  • 文档列表和详情在同一租户下口径一致

风险

  • 某些历史脏数据可能在收紧后“暂时查不到”,需要预先判定为预期行为

T3 文档业务边界快照固化

数据库变更

  • 补字段:
    • leaudit_documents.root_group_id
    • leaudit_documents.entry_module_id

后端改造

  • 上传落库时写入业务快照
  • 列表/详情优先读持久化快照,不再运行时推断
  • 减少 COALESCE(d.group_id, inferred_group_id) 这类推导

前端改造

  • 无必须改动
  • 后续可显示上传时绑定的业务子类型

验收点

  • 分组树配置变化后,历史文档仍保持原业务归属

风险

  • 需要一次性回填历史文档快照

T4 RuleController 鉴权与权限补齐

数据库变更

后端改造

  • RuleController 全量加 verify_access_token
  • 补功能权限校验
  • 统一透传当前租户上下文

前端改造

  • 无必须改动

验收点

  • 未登录不能直接访问规则接口
  • 无权限用户不能读写规则版本和绑定

风险

  • 可能暴露前端现有页面实际依赖“裸接口”的问题

T5 评查组读链路 tenant-first 收口

数据库变更

  • 短期可先不改表结构
  • 中期需要评估给 leaudit_evaluation_point_groups 增加 tenant_code

后端改造

  • ListGroups
  • ListAllGroups
  • GetGroup
  • GetChildren
  • ListGroupsByDocumentTypes

以上全部接入租户过滤

前端改造

  • rule-groups 页面查询显式带 tenant_code
  • 页面头部显示当前租户

验收点

  • 不同租户打开分组页,看到的根组/子组不再混杂

风险

  • 如果当前业务暂时仍共享分组树,需要先定义共享策略

T6 评查组写链路 tenant-first 收口

数据库变更

  • 中期大概率需要:
    • leaudit_evaluation_point_groups.tenant_code
    • leaudit_rule_group_bindings.tenant_code

后端改造

  • CreateGroup
  • UpdateGroup
  • DeleteGroup
  • BatchDelete
  • BatchUpdateStatus
  • RebindGroup
  • CreateBinding
  • UpdateBinding
  • DeleteBinding

全部改成租户内操作

前端改造

  • 编辑、删除、迁移前提示当前租户范围

验收点

  • 无法跨租户误删、误绑、误迁移分组

风险

  • RebindGroup 是最高危操作,必须单独加保护

T7 规则版本与规则集归属模型重构

数据库变更

  • 评估是否新增:
    • leaudit_rule_sets.tenant_code
    • leaudit_rule_versions.tenant_code

后端改造

  • CreateVersion
  • PublishRuleVersion
  • RollbackRuleVersion
  • ListSets
  • GetVersions
  • GetContent

全部明确租户归属模型

前端改造

  • 规则列表/版本查看显示当前租户

验收点

  • 一个租户发布规则版本,不会影响另一个租户同名规则类型

风险

  • 这是最深层模型调整,需要最后做,不适合第一批直接大改

T8 前端作用域上下文统一

数据库变更

后端改造

  • 允许并鼓励所有主链路查询显式接受 tenant_code

前端改造

  • 首页点击入口时带上 tenant_code
  • sessionStorage 记录 selectedTenantCode
  • 上传页、列表页、分组页、文档类型页全部统一读取/透传

验收点

  • 跨页面刷新、跨模块进入后,租户上下文不丢失

风险

  • 需要统一多页面的 scope 来源,避免出现多个来源互相覆盖

T9 交叉评查跨租户策略明确化

数据库变更

  • 可选补快照字段到 leaudit_review_point_audits

后端改造

  • 明确 _hasCrossReviewDocumentAccess 是否允许跨租户
  • 如果允许:
    • 做显式特权链路
    • 做审计快照
  • 如果不允许:
    • 收紧 bypass scope

前端改造

  • 交叉评查页展示任务涉及租户

验收点

  • 跨租户访问行为是“明确允许”而不是“意外绕过”

风险

  • 这是业务策略题,改之前必须先拍板

当前建议执行顺序

  1. T1 文档上传 tenant-first 收口
  2. T2 文档列表/详情停止 tenant_code + region 混查
  3. T4 RuleController 鉴权与权限补齐
  4. T5 评查组读链路 tenant-first 收口
  5. T8 前端作用域上下文统一
  6. T3 文档业务边界快照固化
  7. T6 评查组写链路 tenant-first 收口
  8. T9 交叉评查跨租户策略明确化
  9. T7 规则版本与规则集归属模型重构