Files
2026-07-29 12:20:12 +08:00

6.5 KiB
Raw Blame History

MODIFIED Requirements

Requirement: 资产操作审计日志必须补充业务可读字段

系统 SHALL 将卡、设备、绑定关系、换货单和相关店铺作为独立 Audit Event Resource 记录,并 MUST 为每个资源保存事件发生时的业务标识快照及该资源自己的 before_dataafter_data,确保业务侧无需查询当前业务表即可理解历史操作。

Scenario: 卡相关事件保存完整关键标识

  • WHEN 系统记录针对单卡或多卡的分配、回收、删除、实名、停复机、绑定或换货事件
  • THEN 每张卡资源快照除内部卡 ID 外还包含当时可用的 ICCID、虚拟号及其他已登记关键业务标识

Scenario: 设备相关事件保存完整关键标识

  • WHEN 系统记录设备绑定、解绑、切卡、远程控制、删除或换货事件
  • THEN 每台设备资源快照除内部设备 ID 外还包含当时可用的虚拟号、IMEI、SN 及其他已登记关键业务标识

Scenario: 店铺相关事件保存名称快照

  • WHEN 系统记录资产分配、资产回收、归属变更或其他涉及店铺的事件
  • THEN 店铺资源快照在店铺 ID 之外还包含事件发生时的店铺名称

Scenario: 设备中的卡作为独立资源

  • WHEN 一次操作通过设备入口影响设备中的某张卡
  • THEN 事件分别关联设备资源与卡资源
  • AND 使用资源角色表明入口设备、受影响卡或引用关系,不得只把卡嵌入设备 JSON

Scenario: 换货同时记录旧卡和新卡

  • WHEN 换货操作将旧卡替换为新卡
  • THEN 同一事件分别关联 old_cardnew_card 资源角色
  • AND 两张卡资源快照分别保存自身当时的虚拟号和 ICCID

Requirement: 审计日志可读字段必须遵循兼容新增原则

系统 SHALL 在统一 Audit Event 切换后保留旧 tb_asset_operation_log 原始数据,但 MUST NOT 回填、转换或投影到新审计中心;新事件不得为兼容旧单资产结构而丢失多资源关系。

Scenario: 旧历史保持独立

  • WHEN 平台需要查询切换前的资产操作历史
  • THEN 系统仅通过既有旧资产日志入口读取原表内容
  • AND /api/admin/audit/*、通用资源时间线和代理/企业资源活动接口不返回旧表记录

Scenario: 新增结构不修改旧历史

  • WHEN 统一 Audit Event 上线
  • THEN 系统不在线回填、重写或删除旧资产日志
  • AND 新操作只写统一 Audit Event不再向旧资产日志表新增记录

Scenario: 不为旧记录补造新结构

  • WHEN 旧资产日志仅保存单资产字段或不完整 JSON
  • THEN 系统不为其创建 Audit Event、Event Resource、结果、风险或链路字段
  • AND 不得从中文描述猜测多资源关系

Requirement: 同类审计场景必须使用统一的可读字段命名

系统 SHALL 通过 Resource Registry 为同类资产资源定义稳定的类型、角色与标识快照字段,平台查询和安全资源活动投影 MUST 使用一致语义。

Scenario: 单卡与批量卡标识命名一致

  • WHEN 系统分别记录单卡和批量卡事件
  • THEN 每张卡均使用同一资源类型及 iccidvirtual_no 快照字段
  • AND 批量场景通过多个资源关联表达,不另造语义不同的聚合字段

Scenario: 设备标识命名稳定

  • WHEN 系统记录多个设备相关事件
  • THEN 设备资源统一使用 virtual_noimeisn 等已登记字段名

Scenario: 资源角色表达换货与绑定语义

  • WHEN 事件涉及入口设备、绑定卡、旧卡、新卡或目标店铺
  • THEN 系统使用注册表中的稳定资源角色编码表达关系
  • AND 查询接口返回对应中文角色名称

Requirement: 审计日志补充可读字段不得引入额外破坏性变更

系统 SHALL 仅替换资产审计写入与查询投影,不得借本次变更调整资产、店铺、账号、企业授权或换货的既有业务规则。

Scenario: 店铺删除规则保持不变

  • WHEN 本次变更上线
  • THEN 店铺删除相关业务规则不因审计切换而发生变化

Scenario: 企业账号列表行为保持不变

  • WHEN 本次变更上线
  • THEN 账号列表接口的企业账号展示逻辑不因审计切换而发生变化

Scenario: 企业资产授权规则保持不变

  • WHEN 企业查询资源安全活动
  • THEN 系统复用现有有效卡和设备授权关系判断归属
  • AND 不改变授权、撤销或资产归属业务事实

ADDED Requirements

Requirement: 旧资产操作日志接口必须收缩为平台历史入口

系统 SHALL 在安全资源活动接口可用后,将旧 GET /api/admin/assets/:identifier/operation-logs 收缩为仅超级管理员和平台用户可访问的过渡历史入口,并 MUST 停止向代理和企业返回内部资产审计 DTO。

Scenario: 平台查询旧资产日志

  • WHEN 超级管理员或平台用户在过渡期调用旧资产操作日志接口
  • THEN 系统允许读取对应资产的历史旧日志
  • AND 不对旧表执行修改或删除

Scenario: 代理改用安全活动接口

  • WHEN 代理调用旧资产操作日志接口
  • THEN 系统返回无权限错误
  • AND 代理通过独立安全资源活动接口查询自身范围内的业务结论

Scenario: 企业改用安全活动接口

  • WHEN 企业调用旧资产操作日志接口
  • THEN 系统返回无权限错误
  • AND 企业通过独立安全资源活动接口查询当前企业有效授权资产的业务结论

Requirement: 旧资产日志裸 Goroutine 写入必须停止

系统 MUST 使用统一 Audit Event Writer 替代资产审计服务的裸 Goroutine 写入;高风险成功操作 MUST 与业务事实同一 GORM 事务,失败或拒绝 MUST 在业务回滚后使用独立短事务写入。

Scenario: 新资产操作不再写旧表

  • WHEN 某资产写用例完成统一 Audit Event 接入并切换上线
  • THEN 该用例不再向 tb_asset_operation_log 新增记录

Scenario: 统一审计写入失败

  • WHEN 高风险资产操作的 Audit Event 在业务事务内写入失败
  • THEN 业务事务回滚并返回统一错误
  • AND 不得通过后台 Goroutine 补写后假装与业务事实原子一致

Scenario: 失败事件独立落库

  • WHEN 资产业务操作已回滚且需要记录 faileddenied 事件
  • THEN 系统使用独立短事务写入失败或拒绝 Audit Event
  • AND 二次写入失败时保留原业务错误并记录 critical 日志和指标