8.7 KiB
8.7 KiB
中高低风险修复优化计划
适用范围:
leaudit-platform当前权限、租户、地区隔离、多租户入口模块改造收尾阶段
更新日期:2026-05-20
文档定位:把当前“哪些地方还没收口”转成可执行的风险分级修复计划,作为后续逐步开发、联调、验收的直接依据。
1. 总体原则
本轮改造后续一律按下面 5 条原则推进:
- 所有“归属租户”语义统一收口到
tenant_code tenant_name只负责展示,不再承担主键语义area / region / default / 省级 / 公共只允许存在于兼容层、历史数据清洗层、展示层- 所有 service 内部查询、写入、权限边界判断优先走
tenant_code - 所有角色判断最终要迁到“权限点 + 数据范围 + 租户能力”,不能长期保留
admin/provincial_admin/common/super_admin业务硬编码
2. 风险分级标准
2.1 高风险
满足任一条件即归为高风险:
- 会直接导致“查错数据、落错租户、串版本、越权访问”
- 底层数据表没有
tenant_code主字段,当前仍靠area/region做真实过滤 - 查询链路和写入链路不一致,容易出现“写到 A,查按 B”
- 会影响多个下游模块的主数据域
2.2 中风险
满足任一条件即归为中风险:
- 不一定立刻串数据,但会造成前后端边界不一致
- 前端仍按旧角色、旧地区字段判断,和后端真实权限模型不一致
- 业务能跑,但兼容层和正式模型混用,后续维护成本高且容易继续扩散
2.3 低风险
满足任一条件即归为低风险:
- 不直接影响数据正确性与权限边界
- 主要影响可维护性、一致性、可理解性、页面上手体验
- 适合在主链稳定后统一清理
3. 高风险修复计划
3.1 范围
当前高风险模块如下:
- 文档模块
T2 - 内部公文模块
T3 - 合同模板模块
T6 - 系统使用统计模块
T7 - 核心业务表
tenant_code缺失与历史area/region主过滤残留
3.2 当前问题
这些模块虽然已经接了 TenantResolver 或兼容入参,但底层仍存在以下问题:
- 业务表未落真实
tenant_code - SQL 过滤主条件仍是
region/area - 接口表面支持
tenant_code,但只是转译成中文地区再去查 - 历史公共范围仍散落为
default / 公共 / 省级 - 统计快照字段还没有完整记录
tenant_code
3.3 修复目标
高风险阶段必须达成:
- 核心业务表具备
tenant_code - 列表、详情、上传、删除、运行、版本链、统计聚合统一按
tenant_code region/area退化为兼容展示字段PUBLIC / PROVINCIAL变成规范租户编码,不再以中文和default直接参与 SQL
3.4 执行顺序
H1 数据库主链补齐
目标:
- 识别仍缺
tenant_code的核心业务表 - 补字段、索引、必要约束
- 设计历史数据回填脚本
优先表:
leaudit_documentscontract_templatesusage_login_eventsrag_datasetrag_chat_app- 评估内部公文相关主表是否需单独补
tenant_code,还是直接复用leaudit_documents.tenant_code
H2 文档模块收口
目标:
- 上传写入
tenant_code - 列表/详情/附件/删除/版本链按
tenant_code查询 _resolve_document_region降级为兼容展示方法
H3 内部公文模块收口
目标:
- 上传、列表、详情、运行、结果统一基于
tenant_code - 公文版本链、运行链、路径链路不再以
region作为真实归属键
H4 合同模板模块收口
目标:
- 去掉
'' AS tenant_code这类伪租户返回 - 列表、详情、搜索、上传统一改成真实
tenant_code region只保留中文展示与兼容输入
当前进展:
- 第一轮高风险已完成
- 上传权限、列表/详情/搜索 scope、公共/省级查询口径已收口为
tenant_code优先 - 旧数据仍允许按
region兜底命中,但不再把region当新数据真实归属键
H5 统计模块收口
目标:
- 登录/上传/运行等事件记录租户快照
- 聚合统计按
tenant_code计算 - 页面展示再映射为
tenant_name
3.5 高风险验收标准
- 任意核心业务记录都能明确看到
tenant_code - 同名文档、模板、公文在不同租户之间不会串数据
- 非本租户用户无法通过列表、详情、附件、运行、统计明细绕过边界
- 公共/省级范围由规范租户编码统一表达
- 即使
tenant_name被修改,历史归属和查询边界也不受影响
3.6 高风险阶段不做的事
- 不在这个阶段追求完全去掉所有
region/area字段 - 不在这个阶段大面积重构统一权限执行器
- 不在这个阶段优先做页面视觉优化
4. 中风险修复计划
4.1 范围
当前中风险模块如下:
T4RAG 知识库模块T1RBAC 管理域剩余角色/范围硬编码T10前端菜单、守卫、按钮显隐中的旧角色判断- 交叉评查入口与可见性判断残留的
area/region/provincial_admin分支
4.2 当前问题
- 前后端都还存在“认角色名”的逻辑
- RAG 底层还是
area主模型 - 前端可见性和后端鉴权未完全同构
- 某些页面已经接了租户接口,但按钮是否显示仍按
admin/provincial_admin
4.3 修复目标
- RAG 数据集、应用改用
tenant_code - 前端从“角色名驱动”迁到“权限点 + 能力 + 租户归属”
- RBAC 页面中的核心角色保护、系统角色识别改为后端权威字段或配置
- 菜单守卫与接口鉴权口径保持一致
4.4 执行顺序
M1 RAG 数据模型和服务收口
目标:
rag_dataset、rag_chat_app补tenant_code- service 查询、创建、编辑、删除统一按
tenant_code - 公共知识库策略从角色判断改为标准租户能力规则
M2 前端角色硬编码收口
目标:
user-routesguardcross-checking-accessrole-permissionscontract-templatedify-dataset-manager
统一改成:
- 按权限点判断能否访问
- 按租户归属判断能否管理
- 仅保留极少数系统级保底兼容
M3 RBAC 边界统一
目标:
- 系统角色识别不再由前端手工猜
- 角色删除保护由后端统一返回是否允许删除
- 页面展示不再写死
provincial_admin/admin/common
4.5 中风险验收标准
- 自定义角色只要拿到权限,前端就能正确显示入口与按钮
- 没有权限时,即使角色名叫
admin也不能误显示能力 - 前端守卫、菜单、按钮显隐与接口 403 结果一致
- RAG 不再依赖
area作为真实归属字段
5. 低风险修复计划
5.1 范围
当前低风险事项如下:
- 页面 UI 风格统一
- 旧命名清理
- 兼容字段对外返回口径统一
- 文档导航与开发说明补齐
5.2 当前问题
- 租户管理页和角色权限页视觉系统还不完全统一
- 前端大量
area-*、region-*、tenant-*命名混用 - 部分返回结构里主字段和兼容字段同时存在,但优先级不够明确
5.3 修复目标
- 租户管理、角色权限、入口模块等后台页风格统一
- 新接口主输出统一为
tenant_code / tenant_name - 旧字段仅作为兼容字段保留,并在类型和注释中明确标记
- 文档导航和执行进度持续更新
5.4 执行顺序
L1 角色权限页样式统一
目标:
- 完成
RolePermissionsClient.tsx新结构对应 CSS - 与租户管理页保持同一后台设计语言
L2 命名清理
目标:
- 新增代码不再出现新的
area-*命名 - 旧
area/region命名逐步迁到tenant-*
L3 文档与注释补充
目标:
- 更新总导航
- 更新当前进度
- 为新迁移脚本和关键兼容点补说明
5.5 低风险验收标准
- 页面风格统一、上手成本降低
- 新代码可读性显著提升
- 后续开发者能明确知道哪些字段是主字段、哪些只是兼容字段
6. 推荐执行计划
建议按下面顺序推进:
- 先完成高风险
H1-H5 - 再完成中风险
M1-M3 - 最后完成低风险
L1-L3
原因:
- 先保数据和边界正确
- 再保权限模型一致
- 最后做视觉、命名、文档收尾
7. 本轮立即启动项
本轮开始直接执行以下两件事:
- 先补“高风险数据库迁移清单”,明确哪些表要加
tenant_code - 然后从
T2/T3/T6主链开始,把文档、公文、合同模板改成tenant_code主过滤
这两步完成后,项目才算真正进入“tenant_code 全链路收口”阶段,而不是继续停留在兼容层阶段。