559 lines
27 KiB
Markdown
559 lines
27 KiB
Markdown
# 会议核销SaaS 未开发项迭代清单(2026-03 最新)
|
||
|
||
## 一、现状结论
|
||
|
||
- 已完成:项目/会议/审核/财务主链路、审核流配置化、用户角色增强、数据权限、模板管理(上传/发布/停用/回滚/下载留痕/类型配置)、会议资料六大模块(`BASIC_INFO`、`WRITE_OFF_DOCS`、`ONSITE_PHOTO`、`LABOR_PROTOCOL`、`INVOICE_DETAIL`、`EXPERT_PROFILE`)、通知策略中心、可观测性告警中心(含抑制与恢复)。
|
||
- 主要缺口:通知外部通道真实SDK接入(厂商鉴权/模板审核/限流策略)与经营分析报表(多维钻取)。
|
||
- 本清单同步维护“状态看板 + 迭代任务”,用于区分已完成、进行中与未开始项。
|
||
|
||
### 1.1 状态看板(2026-03-10)
|
||
|
||
| 模块/任务 | 当前状态 | 说明 |
|
||
|---|---|---|
|
||
| T1 租户管理(C1) | 已完成(待QA执行) | 后端接口、前端页面、启停与权限控制已接通;仍需按测试单执行并回填结果。 |
|
||
| T2 企业管理(C2) | 已完成(待QA执行) | 企业主数据与项目引用联动已落地;仍需回填回归结果。 |
|
||
| T3 菜单管理(C3) | 已完成(待QA执行) | 菜单维护、角色绑定、排序与动态加载已落地;仍需补最终回归记录。 |
|
||
| T4 代理授权(C4) | 已完成(待手工QA执行) | 生命周期、鉴权继承、自动化单测与回归模板已完成;手工用例执行结果待回填。 |
|
||
| T5 账号有效期(C5) | 功能已完成(QA未闭环) | 字段迁移、登录/会话拦截、前端展示已实现;缺少任务卡级进展与QA执行记录。 |
|
||
| P2-5 通知真实SDK接入 | 未开始 | 真实供应商鉴权、模板审核、失败原因标准化仍为主要缺口。 |
|
||
| 经营分析报表(多维钻取) | 未开始 | 当前仅有运营看板汇总,未形成报表钻取能力。 |
|
||
|
||
## 二、P0(必须补齐)
|
||
|
||
### P0-1 多租户真实化改造(替换硬编码 tenant_id=1)
|
||
|
||
- 范围
|
||
- 租户上下文从登录态注入,业务查询/写入全部走动态 `tenant_id`。
|
||
- 新增租户管理(平台管理员):创建、启停、查询。
|
||
- 后端 API
|
||
- `GET /api/tenants`
|
||
- `POST /api/tenants`
|
||
- `POST /api/tenants/{id}/enable`
|
||
- `POST /api/tenants/{id}/disable`
|
||
- DDL
|
||
- `tenant`(若未创建)
|
||
- 业务高频表补充复合索引(`tenant_id + 业务键`)
|
||
- 验收
|
||
- 同一账号跨租户不可见数据。
|
||
- 导出/下载/搜索均走租户隔离。
|
||
- 人天
|
||
- 后端 8d + 前端 2d + 测试 3d = **13d**
|
||
|
||
### P0-2 审计日志中心(关键动作可检索/导出)
|
||
|
||
- 范围
|
||
- 登录、权限变更、审核动作、支付确认、导出下载等关键操作留痕。
|
||
- 支持条件检索与导出。
|
||
- 后端 API
|
||
- `GET /api/audit-logs`
|
||
- `GET /api/audit-logs/export`
|
||
- 前端
|
||
- 新增“审计日志”页面(筛选、列表、导出)。
|
||
- DDL
|
||
- `operation_audit_log`(落表 + 索引优化)
|
||
- 验收
|
||
- 高风险动作 100% 可追溯到人/时间/对象。
|
||
- 人天
|
||
- 后端 4d + 前端 2d + 测试 2d = **8d**
|
||
|
||
## 三、P1(高优先级业务补齐)
|
||
|
||
### P1-1 会议资料四大模块补齐
|
||
|
||
- 范围
|
||
- 新增模块:`ONSITE_PHOTO`、`LABOR_PROTOCOL`、`INVOICE_DETAIL`、`EXPERT_PROFILE`。
|
||
- 当前进度:四个新增模块已全部完成(`ONSITE_PHOTO`、`LABOR_PROTOCOL`、`INVOICE_DETAIL`、`EXPERT_PROFILE`)。
|
||
- 模块级保存/提交/历史/审核查看对齐现有两模块能力。
|
||
- 后端 API
|
||
- 复用现有 `/materials/{moduleCode}/save|submit|history|current`
|
||
- 扩展模块校验规则与字段结构
|
||
- 前端
|
||
- 会议资料页补齐四个模块录入与历史对比
|
||
- 审核端“查看资料”补齐结构化展示
|
||
- DDL
|
||
- 复用 `meeting_material` / `meeting_material_history`
|
||
- 验收
|
||
- 六大资料模块都支持提交前必填校验与历史可追溯。
|
||
- 人天
|
||
- 后端 5d + 前端 6d + 测试 3d = **14d**
|
||
|
||
### P1-2 审核管理增强(转审 + SLA + 批量)
|
||
|
||
- 范围
|
||
- 转审、批量催办、SLA 超时升级。
|
||
- 当前进度:已完成后端 API、DDL 与前端审核页能力(转审弹窗、批量催办、SLA 统计与超时标识)。
|
||
- 后端 API
|
||
- `POST /api/audits/tasks/{id}/transfer`
|
||
- `POST /api/audits/tasks/batch-remind`
|
||
- `GET /api/audits/tasks/sla-stat`
|
||
- 前端
|
||
- 审核页增加转审弹窗、批量催办、SLA 标识
|
||
- DDL
|
||
- `audit_task` 补 `sla_deadline_at`、`timeout_level`
|
||
- `audit_transfer_log`
|
||
- 验收
|
||
- 超时 4h/12h/24h 升级可见,转审链路有日志。
|
||
- 人天
|
||
- 后端 4d + 前端 3d + 测试 2d = **9d**
|
||
|
||
### P1-3 财务对账与锁账
|
||
|
||
- 范围
|
||
- 对账工单、锁账/解锁、差异追踪。
|
||
- 当前进度:已完成后端 API、DDL、支付确认拦截(锁账)与前端财务页对账/锁账记录展示。
|
||
- 后端 API
|
||
- `POST /api/finance/reconciliation`
|
||
- `POST /api/finance/lock`
|
||
- `POST /api/finance/unlock`
|
||
- `GET /api/finance/reconciliation/list`
|
||
- 前端
|
||
- 财务页补“对账结果”“锁账状态”“解锁记录”
|
||
- DDL
|
||
- `finance_reconciliation`
|
||
- `finance_lock_log`
|
||
- 验收
|
||
- 锁账期间禁止关键财务字段写入。
|
||
- 人天
|
||
- 后端 5d + 前端 3d + 测试 2d = **10d**
|
||
|
||
### P1-4 模板管理剩余闭环
|
||
|
||
- 范围
|
||
- 归档状态、版本差异追踪、水印下载、流程模板联动(通知模板/结算模板)。
|
||
- 当前进度:已完成归档、版本差异追踪、水印下载、流程模板联动(会议推荐/审核通知/结算模板绑定)。
|
||
- 后端 API
|
||
- `POST /api/templates/{id}/archive`
|
||
- `GET /api/templates/{id}/versions/diff`
|
||
- `GET /api/templates/{id}/download-watermark`
|
||
- 前端
|
||
- 模板页补“归档”“版本差异查看”
|
||
- 验收
|
||
- 已归档模板不可再发布,差异可视化可用。
|
||
- 人天
|
||
- 后端 3d + 前端 2d + 测试 1d = **6d**
|
||
|
||
## 四、P2(治理与效率)
|
||
|
||
### P2-1 专家(参会人)管理全量能力
|
||
|
||
- 范围
|
||
- 主档案、多卡、去重合并、导入导出、会议快照。
|
||
- 当前进度:已完成主档案、多卡、去重合并、导入导出与专家管理页面;会议提交已接入专家快照写入链路。
|
||
- 后端 API
|
||
- `GET/POST /api/experts`
|
||
- `POST /api/experts/{id}/merge`
|
||
- `POST /api/experts/import`
|
||
- `GET /api/experts/export`
|
||
- 前端
|
||
- 专家管理页面 + 合并记录 + 银行卡管理
|
||
- DDL
|
||
- `expert`、`expert_bank_card`、`expert_merge_log`、`meeting_expert_snapshot`
|
||
- 验收
|
||
- 身份证唯一校验,历史会议读快照。
|
||
- 人天
|
||
- 后端 8d + 前端 6d + 测试 4d = **18d**
|
||
|
||
### P2-2 通知策略中心
|
||
|
||
- 范围
|
||
- 事件->渠道->对象可配置,模板变量统一管理。
|
||
- 当前进度:已完成策略中心 DDL、后端 `GET/POST/PUT /api/notification-policies` 与前端通知策略页面。
|
||
- 后端 API
|
||
- `GET/POST/PUT /api/notification-policies`
|
||
- 前端
|
||
- 通知策略页面
|
||
- DDL
|
||
- `notification_policy`、`notification_policy_event`
|
||
- 验收
|
||
- 策略即时生效,可追溯变更。
|
||
- 人天
|
||
- 后端 4d + 前端 2d + 测试 2d = **8d**
|
||
|
||
### P2-3 可观测性与告警
|
||
|
||
- 范围
|
||
- 指标、日志、告警阈值、任务失败告警闭环。
|
||
- 当前进度:已完成指标埋点(API、异步任务、导出)与告警规则中心(规则配置、手动评估、事件查询、抑制窗口、自动恢复)。
|
||
- 交付
|
||
- 指标埋点(API、异步任务、导出)
|
||
- 告警规则(5xx、任务积压、超时率)
|
||
- 验收
|
||
- 告警可触发、可恢复、可追踪。
|
||
- 人天
|
||
- 后端 3d + 运维 2d + 测试 1d = **6d**
|
||
|
||
### P2-4 补缺闭环(文档对照新增)
|
||
|
||
- 范围
|
||
- 已完成:会议撤回提交(状态机与审计联动)
|
||
- 已完成:会议字段管理(字典配置)
|
||
- 已完成:发票管理(抬头主数据)
|
||
- 已完成:通知执行引擎(任务化发送、重试、回执)
|
||
- 已完成:导出任务中心(任务状态、下载安全)
|
||
- 已完成:可观测性自动评估与连续恢复判定
|
||
- 后端 API(建议)
|
||
- `POST /api/meetings/{id}/withdraw`
|
||
- `GET/POST/PUT /api/meeting-fields`
|
||
- `GET/POST/PUT /api/invoice-profiles`
|
||
- `POST /api/notifications/dispatch`
|
||
- `POST /api/notifications/receipts`
|
||
- `GET /api/notifications/tasks`
|
||
- `GET/POST /api/export-tasks`
|
||
- `POST /api/export-tasks/{id}/refresh-token`
|
||
- `GET /api/export-tasks/{id}/download`
|
||
- `POST /api/observability/alert-rules/evaluate/auto`
|
||
- `GET /api/operations/dashboard`
|
||
- 验收
|
||
- 文档与实现接口 1:1 对齐,新增模块可独立上线并通过回归。
|
||
- 人天
|
||
- 后端 8d + 前端 6d + 测试 4d = **18d**
|
||
|
||
### P2-5 深化治理(进行中)
|
||
|
||
- 范围
|
||
- 已完成:通知回执标准化(消息ID、回执码、回执日志)
|
||
- 已完成:导出下载鉴权与过期策略(令牌刷新、过期控制、下载计数)
|
||
- 已完成:运营看板趋势与TOP(通知/导出/告警)
|
||
- 待完成:真实供应商SDK接入与失败原因规范化字典
|
||
- 后端 API(新增)
|
||
- `POST /api/notifications/receipts`
|
||
- `POST /api/notifications/receipts/webhook`
|
||
- `POST /api/export-tasks/{id}/refresh-token`
|
||
- `GET /api/export-tasks/{id}/download`
|
||
- `GET /api/operations/dashboard`
|
||
|
||
## 五、建议迭代顺序(接下来 4 个 Sprint)
|
||
|
||
- Sprint E(2周):P0-1 多租户真实化 + P0-2 审计日志中心
|
||
- Sprint F(2周):P1-1 资料四模块补齐 + P1-2 审核增强
|
||
- Sprint G(2周):P1-3 财务对账锁账 + P1-4 模板闭环
|
||
- Sprint H(2-3周):P2-1 专家管理 + P2-2 通知策略 + P2-3 可观测性
|
||
|
||
## 六、DoD(本清单统一完成标准)
|
||
|
||
- 接口文档:请求/响应/错误码补齐。
|
||
- 数据迁移:Flyway 脚本可重复执行,预发验证通过。
|
||
- 权限校验:菜单权限 + 动作权限 + 数据权限全链路生效。
|
||
- 测试:单测 + 关键集成测试 + 最少 1 条回归脚本。
|
||
- 留痕:关键动作有审计日志(操作者、对象、前后值、时间)。
|
||
|
||
## 七、“有概念、无模块化定义”缺口补全(本轮新增)
|
||
|
||
### C1 租户管理模块化补全(平台级)
|
||
|
||
- 缺口来源
|
||
- 业务文档已有“平台超级管理员可创建/启停单位主体”概念,但缺页面与流程化定义。
|
||
- 技术文档“接口实施状态”提到已实现租户能力,但接口清单未显式列出租户分组。
|
||
- 页面定义(前端)
|
||
- 新增“租户管理”菜单与页面:列表、创建、启用、停用。
|
||
- 字段:`tenantCode`、`tenantName`、`status`、`createdAt`。
|
||
- 后端 API
|
||
- `GET /api/tenants`
|
||
- `POST /api/tenants`
|
||
- `POST /api/tenants/{id}/enable`
|
||
- `POST /api/tenants/{id}/disable`
|
||
- 数据与约束
|
||
- `tenant_code` 唯一,状态仅允许 `ENABLED/DISABLED`。
|
||
- 启停租户需写入审计日志(动作码建议:`tenant.manage`)。
|
||
- 验收
|
||
- 平台管理员可在页面完成全流程;无 `tenant.manage` 权限用户不可操作。
|
||
- 两份主文档均包含模块、接口、权限点与页面入口说明。
|
||
- 人天
|
||
- 后端 1d + 前端 1d + 测试 1d = **3d**
|
||
|
||
### C2 企业管理模块化补全(系统设置)
|
||
|
||
- 缺口来源
|
||
- 业务文档有“企业管理”字段要求,但技术文档无对应模块定义/接口清单。
|
||
- 页面定义(前端)
|
||
- 列表、详情、创建、编辑、启停(如业务确认需要)。
|
||
- 字段:企业名称、网址、Logo、状态、更新时间。
|
||
- 后端 API(建议)
|
||
- `GET /api/enterprises`
|
||
- `POST /api/enterprises`
|
||
- `PUT /api/enterprises/{id}`
|
||
- `POST /api/enterprises/{id}/enable`
|
||
- `POST /api/enterprises/{id}/disable`
|
||
- 数据与约束
|
||
- 新增 `enterprise` 主表;名称唯一,Logo 必填校验。
|
||
- 项目模块“合作企业”字段改为引用企业主数据。
|
||
- 验收
|
||
- 项目创建/编辑可引用企业主数据,禁止手填脏数据。
|
||
- 企业启停后在项目选择器实时生效。
|
||
- 人天
|
||
- 后端 3d + 前端 2d + 测试 2d = **7d**
|
||
|
||
### C3 菜单管理模块化补全(权限可见性)
|
||
|
||
- 缺口来源
|
||
- 业务文档有“菜单管理”概念,技术文档未定义菜单数据模型和权限映射策略。
|
||
- 页面定义(前端)
|
||
- 菜单列表(树形)、角色菜单绑定、菜单启停与排序。
|
||
- 后端 API(建议)
|
||
- `GET /api/menus`
|
||
- `POST /api/menus`
|
||
- `PUT /api/menus/{id}`
|
||
- `POST /api/roles/{id}/menus`
|
||
- `GET /api/roles/{id}/menus`
|
||
- 数据与约束
|
||
- `menu`、`role_menu` 表;菜单与 `permissionCode` 建立映射。
|
||
- 前端“可见性”与后端“动作权限”双校验,禁止只做前端隐藏。
|
||
- 验收
|
||
- 不同角色登录看到不同菜单树,且后端越权访问仍被拦截。
|
||
- 人天
|
||
- 后端 4d + 前端 3d + 测试 2d = **9d**
|
||
|
||
### C4 代理授权模块化补全(用户生命周期)
|
||
|
||
- 缺口来源
|
||
- 业务文档明确要求代理授权生效/失效与留痕,技术文档仅概念提及。
|
||
- 页面定义(前端)
|
||
- 用户详情新增“代理授权”配置:代理人、生效时间、失效时间、原因。
|
||
- 代理记录列表:状态(待生效/生效中/已失效)。
|
||
- 后端 API(建议)
|
||
- `POST /api/users/{id}/delegations`
|
||
- `GET /api/users/{id}/delegations`
|
||
- `POST /api/delegations/{id}/disable`
|
||
- 数据与约束
|
||
- 新增 `user_delegation` 表,记录授权窗口、状态、创建人与失效原因。
|
||
- 审计记录动作码建议:`user.delegation.manage`。
|
||
- 验收
|
||
- 到达失效时间自动失效;代理操作可完整追溯授权链。
|
||
- 人天
|
||
- 后端 3d + 前端 2d + 测试 2d = **7d**
|
||
|
||
### C5 账号有效期模块化补全(鉴权拦截)
|
||
|
||
- 缺口来源
|
||
- 业务文档要求账号有效期必填,技术文档缺字段规范与认证拦截定义。
|
||
- 页面定义(前端)
|
||
- 用户新增/编辑增加“有效期开始/结束”。
|
||
- 到期账号列表筛选与状态提示。
|
||
- 后端 API(建议)
|
||
- 复用 `POST/PUT /api/users` 增加 `validFrom`、`validTo` 字段。
|
||
- 登录接口增加有效期校验失败错误码返回(建议 `11004`)。
|
||
- 数据与约束
|
||
- `sys_user` 增加 `valid_from`、`valid_to`。
|
||
- 登录、刷新令牌、关键写操作统一做有效期检查。
|
||
- 验收
|
||
- 过期账号无法登录且返回统一错误码;在有效期内恢复正常。
|
||
- 人天
|
||
- 后端 2d + 前端 1d + 测试 1d = **4d**
|
||
|
||
## 八、缺口补全里程碑(建议)
|
||
|
||
| 里程碑 | Sprint | 交付模块 | 目标结果 |
|
||
|---|---|---|---|
|
||
| M1 | Sprint I(1周) | C1 租户管理、C5 账号有效期 | 平台可创建/启停租户;账号到期拦截口径统一 |
|
||
| M2 | Sprint J(2周) | C2 企业管理、C4 代理授权 | 企业主数据可维护并被项目引用;代理授权可配置并自动失效 |
|
||
| M3 | Sprint K(2周) | C3 菜单管理 | 角色菜单树可配置;菜单可见性与动作权限一体化生效 |
|
||
| M4 | Sprint L(1周) | 文档与验收收口 | 两份主文档与实现清单 1:1 对齐,补齐回归与审计验证 |
|
||
|
||
### 里程碑验收门槛(统一)
|
||
|
||
- 接口与页面:每个模块至少 1 条端到端回归脚本通过。
|
||
- 权限链路:登录鉴权、动作权限、数据权限、有效期校验全部生效。
|
||
- 数据治理:Flyway 脚本可重复执行,升级/回滚路径可验证。
|
||
- 审计追溯:创建、启停、授权、失效、权限变更全量留痕可检索。
|
||
|
||
## 九、开发任务卡(可直接排期)
|
||
|
||
### 9.0 任务状态总览(2026-03-10)
|
||
|
||
| 任务 | 状态 | 备注 |
|
||
|---|---|---|
|
||
| T1 | 已完成(待QA执行) | 功能已落地,测试结果待回填。 |
|
||
| T2 | 已完成(待QA执行) | 功能已落地,测试结果待回填。 |
|
||
| T3 | 已完成(待QA执行) | 功能已落地,测试结果待回填。 |
|
||
| T4 | 已完成(待手工QA执行) | 自动化基线已补,手工回归待执行。 |
|
||
| T5 | 功能已完成(QA未闭环) | 缺任务卡进展说明与回归结果。 |
|
||
|
||
### T1 租户管理(平台级)
|
||
|
||
- 目标
|
||
- 提供租户列表、创建、启用、停用能力,并纳入统一权限与审计链路。
|
||
- 后端任务
|
||
- 完成 `TenantController/TenantService` 接口稳定化与参数校验。
|
||
- 增加错误码映射:重复租户编码、状态非法、无权限。
|
||
- 审计日志接入:`tenant.manage`(创建/启停分动作码)。
|
||
- 前端任务
|
||
- 新增 `TenantPage`(列表、创建弹窗、启停按钮)。
|
||
- 在菜单中增加平台入口(仅具备权限用户可见)。
|
||
- 按钮权限:`tenant.manage`。
|
||
- SQL/Flyway
|
||
- 确认 `tenant` 表字段完整:`tenant_code` 唯一、`status`、审计字段。
|
||
- 历史数据修复脚本:空 `tenant_code` 回填与唯一约束检查。
|
||
- 测试用例
|
||
- 正常创建租户、重复编码拦截、启停状态切换、无权限拦截。
|
||
- 停用租户下账号登录失败验证。
|
||
- DoD
|
||
- 页面可操作、接口稳定、日志可检索、回归通过。
|
||
|
||
- 当前实现进展(2026-03-10)
|
||
- 已完成:租户列表/创建/启停接口与前端页面,菜单入口与 `tenant.manage` 按钮权限控制。
|
||
- 已完成:Flyway 兼容修复与 `tenant_code` 约束补齐。
|
||
- 待完成:按 `TASK-T1-QA-01` 执行手工回归并回填结果。
|
||
|
||
### T2 企业管理(系统设置)
|
||
|
||
- 目标
|
||
- 企业主数据独立维护,并可在项目模块引用,杜绝手填脏数据。
|
||
- 后端任务
|
||
- 新增企业 CRUD 与启停接口。
|
||
- 项目创建/编辑改为企业 ID 引用校验。
|
||
- 约束:企业停用后不可被新增项目引用。
|
||
- 前端任务
|
||
- 新增企业管理页(列表、详情、创建、编辑、启停)。
|
||
- 项目页面“合作企业”改为下拉选择企业主数据。
|
||
- SQL/Flyway
|
||
- 新增 `enterprise` 表及唯一索引(企业名称/编码按最终口径确定)。
|
||
- 项目表增加 `enterprise_id`(若当前为名称存储需迁移脚本)。
|
||
- 测试用例
|
||
- 企业启停与项目引用联动、重复名称校验、历史项目兼容查询。
|
||
- DoD
|
||
- 企业数据可维护,项目联动稳定,历史数据可回溯。
|
||
|
||
- 当前实现进展(2026-03-10)
|
||
- 已完成:企业表迁移、企业 CRUD/启停接口、项目绑定企业引用校验。
|
||
- 已完成:企业管理页与项目“合作企业”下拉联动。
|
||
- 待完成:按 `TASK-T2-QA-01` 执行联调回归并回填结果。
|
||
|
||
### T3 菜单管理(角色菜单树)
|
||
|
||
- 目标
|
||
- 菜单可见性可配置,且与动作权限统一治理。
|
||
- 后端任务
|
||
- 提供菜单树查询、菜单维护、角色菜单绑定接口。
|
||
- 校验角色绑定数据合法性(菜单存在、状态可用、层级正确)。
|
||
- 前端任务
|
||
- 新增菜单管理页(树形、排序、启停、角色绑定)。
|
||
- 登录后按角色加载菜单树,未授权菜单不展示。
|
||
- SQL/Flyway
|
||
- 新增 `menu`、`role_menu` 表,建立索引(`role_id`、`menu_id`)。
|
||
- 菜单与 `permission_code` 字段对齐。
|
||
- 测试用例
|
||
- 角色切换后菜单变化、越权接口后端拦截、菜单停用即时生效。
|
||
- DoD
|
||
- 菜单可配置、权限一致、越权不可达。
|
||
|
||
- 当前实现进展(2026-03-10)
|
||
- 已完成:菜单管理接口、角色菜单绑定、`permission_code` 对齐与批量排序保存。
|
||
- 已完成:前端菜单管理页、角色绑菜单、登录后按权限动态加载菜单。
|
||
- 待完成:按 `TASK-T3-QA-01` 执行越权与可见性回归并回填结果。
|
||
|
||
### T4 代理授权(用户生命周期)
|
||
|
||
- 目标
|
||
- 支持代理授权时间窗配置、自动失效、全链路审计。
|
||
- 后端任务
|
||
- 提供授权创建/查询/停用接口。
|
||
- 增加定时任务:过期授权自动置为失效。
|
||
- 鉴权侧接入代理上下文判定(仅在有效窗口内生效)。
|
||
- 前端任务
|
||
- 用户详情新增代理授权配置与记录列表。
|
||
- 显示授权状态(待生效/生效中/已失效/手动停用)。
|
||
- SQL/Flyway
|
||
- 新增 `user_delegation` 表及状态索引(`status`,`effective_to`)。
|
||
- 测试用例
|
||
- 授权生效、过期自动失效、手动停用、审计记录完整。
|
||
- DoD
|
||
- 授权链路可追溯、时间窗行为正确、异常场景可控。
|
||
|
||
- 当前实现进展(2026-03-10)
|
||
- 已完成:`V37__user_delegation.sql`(表结构+索引+权限种子)、授权创建/查询/停用接口、过期自动失效定时任务、用户页代理授权弹窗(新增/列表/停用)。
|
||
- 已完成:鉴权链路代理上下文生效(代理人可在有效窗口内继承被代理人权限),并补充了后端自动化测试覆盖关键路径。
|
||
- 已完成:`TASK-T4-QA-01` 回归用例模板与自动化单测基线(代理权限继承、时间窗参数校验)。
|
||
|
||
- T4-QA 回归执行清单(可直接拷贝到测试单)
|
||
|
||
| 用例ID | 场景 | 前置条件 | 操作步骤 | 预期结果 | 执行结果 |
|
||
|---|---|---|---|---|---|
|
||
| T4-QA-001 | 授权立即生效 | 用户A、用户B均启用;A具有业务权限;B不具备该权限 | 在用户页为A配置代理人B,生效时间=当前前,失效时间=未来 | 授权记录状态为`ENABLED`;B可访问A对应权限接口 | 待执行 |
|
||
| T4-QA-002 | 授权待生效 | 用户A、用户B均启用 | 配置生效时间=未来,失效时间=更未来 | 记录状态为`PENDING`;B暂不可继承A权限 | 待执行 |
|
||
| T4-QA-003 | 授权自动过期 | 已存在`ENABLED`授权记录,失效时间即将到达 | 等待定时任务窗口(或手工触发任务) | 状态自动切为`EXPIRED`;B失去继承权限 | 待执行 |
|
||
| T4-QA-004 | 手动停用授权 | 已存在`ENABLED`或`PENDING`授权记录 | 在代理授权列表点击“停用”并填写原因 | 状态切为`DISABLED`;停用原因可查询 | 待执行 |
|
||
| T4-QA-005 | 禁止自代理 | 用户A存在 | 为A创建代理,代理人也选择A | 创建失败,返回业务错误“代理人不能与被代理人相同” | 待执行 |
|
||
| T4-QA-006 | 非法时间窗拦截 | 用户A、用户B存在 | 创建授权:`effectiveTo <= effectiveFrom` | 创建失败,返回业务错误“失效时间必须晚于生效时间” | 待执行 |
|
||
| T4-QA-007 | 权限闭环审计 | 已开启操作审计 | 完成一次“创建授权->停用授权”链路 | 审计日志存在对应 API 调用记录与状态变更痕迹 | 待执行 |
|
||
|
||
- T4-QA 自动化测试映射(当前已落地)
|
||
- `PermissionServiceDelegationTest`:覆盖代理权限继承与权限集合去重。
|
||
- `UserDelegationServiceValidationTest`:覆盖自代理拦截、时间窗非法拦截。
|
||
|
||
### T5 账号有效期(统一鉴权拦截)
|
||
|
||
- 目标
|
||
- 在登录、令牌刷新、关键写操作统一校验账号有效期。
|
||
- 后端任务
|
||
- `sys_user` 引入 `valid_from/valid_to` 并在认证链路校验。
|
||
- 新增错误码(建议 `11004`)与统一错误文案。
|
||
- 前端任务
|
||
- 用户创建/编辑增加有效期字段及校验。
|
||
- 到期状态在用户列表显式标记。
|
||
- SQL/Flyway
|
||
- `sys_user` 加字段与默认值迁移;历史账号回填策略。
|
||
- 测试用例
|
||
- 有效期前不可登录、有效期内可登录、过期后自动拦截。
|
||
- 关键写接口(非登录)也进行有效期拒绝校验。
|
||
- DoD
|
||
- 各链路校验一致,错误码统一,回归通过。
|
||
|
||
- 当前实现进展(2026-03-10)
|
||
- 已完成:`V33__user_account_validity.sql` 字段迁移与历史回填(`valid_from/valid_to`)。
|
||
- 已完成:登录与鉴权拦截统一有效期校验,错误码 `11004` 接入前端自动登出处理。
|
||
- 已完成:用户页面有效期录入与“已过期”状态展示。
|
||
- 待完成:补齐 `TASK-T5-QA-01` 回归执行清单与结果回填。
|
||
|
||
## 十、Jira/禅道建单模板(可导入)
|
||
|
||
### 10.1 使用说明
|
||
|
||
- 建议先创建 5 个 Epic:`EPIC-T1`~`EPIC-T5`(对应 T1~T5)。
|
||
- 下面“任务导入表”可直接复制为 CSV(逗号分隔)导入。
|
||
- `依赖` 列用于排期时设置“前置任务”,避免并行冲突。
|
||
|
||
### 10.2 Epic 列表
|
||
|
||
| Epic ID | Epic 名称 | 目标 |
|
||
|---|---|---|
|
||
| EPIC-T1 | 租户管理平台化 | 完成租户创建/启停/审计全链路 |
|
||
| EPIC-T2 | 企业管理主数据化 | 企业主数据维护并联动项目引用 |
|
||
| EPIC-T3 | 菜单权限一体化 | 菜单树与动作权限统一治理 |
|
||
| EPIC-T4 | 代理授权生命周期 | 授权配置、自动失效、可审计 |
|
||
| EPIC-T5 | 账号有效期统一校验 | 登录与关键写操作统一拦截 |
|
||
|
||
### 10.3 任务导入表(CSV列头)
|
||
|
||
`IssueKey,Summary,IssueType,EpicLink,OwnerRole,EstimateDays,Priority,DependsOn,AcceptanceCriteria`
|
||
|
||
`TASK-T1-BE-01,租户管理后端接口与校验,Task,EPIC-T1,后端,1,P0,,实现GET/POST tenants与启停接口并通过单测`
|
||
`TASK-T1-FE-01,租户管理前端页面与菜单入口,Task,EPIC-T1,前端,1,P0,TASK-T1-BE-01,完成列表创建启停页面并接通权限控制`
|
||
`TASK-T1-QA-01,租户管理联调与回归,Task,EPIC-T1,测试,1,P0,TASK-T1-BE-01;TASK-T1-FE-01,覆盖创建重复编码启停无权限用例`
|
||
|
||
`TASK-T2-DB-01,企业主数据表设计与迁移脚本,Task,EPIC-T2,后端,1,P1,,新增enterprise表并完成迁移验证`
|
||
`TASK-T2-BE-01,企业管理接口与项目引用校验,Task,EPIC-T2,后端,2,P1,TASK-T2-DB-01,实现企业CRUD启停并联动项目引用约束`
|
||
`TASK-T2-FE-01,企业管理页面与项目企业下拉,Task,EPIC-T2,前端,2,P1,TASK-T2-BE-01,企业页可维护且项目页改为企业下拉`
|
||
`TASK-T2-QA-01,企业管理联调回归,Task,EPIC-T2,测试,2,P1,TASK-T2-BE-01;TASK-T2-FE-01,覆盖启停联动重复名称历史数据兼容`
|
||
|
||
`TASK-T3-DB-01,菜单与角色菜单关系表迁移,Task,EPIC-T3,后端,1,P1,,新增menu与role_menu并建索引`
|
||
`TASK-T3-BE-01,菜单树与角色绑定后端接口,Task,EPIC-T3,后端,2,P1,TASK-T3-DB-01,实现菜单树查询维护与角色绑定接口`
|
||
`TASK-T3-FE-01,菜单管理页面与动态菜单加载,Task,EPIC-T3,前端,3,P1,TASK-T3-BE-01,角色切换后菜单可见性正确生效`
|
||
`TASK-T3-QA-01,菜单权限回归与越权验证,Task,EPIC-T3,测试,2,P1,TASK-T3-BE-01;TASK-T3-FE-01,覆盖前端可见性与后端越权拦截`
|
||
|
||
`TASK-T4-DB-01,代理授权表与状态索引迁移,Task,EPIC-T4,后端,1,P1,,新增user_delegation表并通过迁移验证`
|
||
`TASK-T4-BE-01,代理授权接口与自动失效任务,Task,EPIC-T4,后端,2,P1,TASK-T4-DB-01,实现授权创建查询停用与过期自动失效`
|
||
`TASK-T4-FE-01,用户详情代理授权UI,Task,EPIC-T4,前端,2,P1,TASK-T4-BE-01,支持授权配置与状态展示`
|
||
`TASK-T4-QA-01,代理授权链路回归,Task,EPIC-T4,测试,2,P1,TASK-T4-BE-01;TASK-T4-FE-01,覆盖生效过期停用与审计追溯`
|
||
|
||
`TASK-T5-DB-01,用户有效期字段迁移,Task,EPIC-T5,后端,1,P0,,sys_user新增valid_from与valid_to并回填策略`
|
||
`TASK-T5-BE-01,认证链路有效期统一校验,Task,EPIC-T5,后端,1,P0,TASK-T5-DB-01,登录刷新关键写操作统一拦截并返回11004`
|
||
`TASK-T5-FE-01,用户有效期表单与状态展示,Task,EPIC-T5,前端,1,P0,TASK-T5-BE-01,新增有效期字段与到期标识展示`
|
||
`TASK-T5-QA-01,有效期全链路回归,Task,EPIC-T5,测试,1,P0,TASK-T5-BE-01;TASK-T5-FE-01,覆盖生效前有效期内过期后三段场景`
|
||
|
||
### 10.4 建议前置依赖图
|
||
|
||
- `T1` 与 `T5` 可并行,建议优先完成(P0)。
|
||
- `T2` 依赖企业表迁移后再做项目联动。
|
||
- `T3` 建议在 `T1/T5` 稳定后推进,避免权限链路改动冲突。
|
||
- `T4` 可与 `T2/T3` 并行,但需与鉴权改造保持分支隔离。
|