修正数据
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m55s

This commit is contained in:
2026-04-27 18:10:08 +08:00
parent bb33232b1b
commit fe4c545308
57 changed files with 4477 additions and 226 deletions

View File

@@ -0,0 +1,64 @@
## ADDED Requirements
### Requirement: 资产域操作日志使用独立数据模型
系统 SHALL 为资产域操作日志使用独立数据模型与数据表,不得复用账号域日志表;资产日志模型 MUST 支持记录资产类型、资产ID、资产标识符、操作动作、操作结果、前后镜像和请求上下文。
#### Scenario: 新增资产日志表并独立于账号日志
- **WHEN** 系统初始化资产域审计能力
- **THEN** 系统使用独立的 `tb_asset_operation_log` 存储资产日志,且不写入 `tb_account_operation_log`
#### Scenario: 资产日志表不使用外键约束
- **WHEN** 创建资产日志表结构
- **THEN** 表间关联通过 ID 字段维护,不创建数据库外键和 GORM 关联标签
### Requirement: 资产敏感写操作必须全量记录
系统 SHALL 对卡和设备相关敏感写操作进行全量审计记录,结果态 MUST 覆盖 `success``failed``denied`
#### Scenario: 成功操作写入 success 日志
- **WHEN** 设备分配、卡绑定、手动实名、停用等写操作执行成功
- **THEN** 系统写入 `result_status=success` 的资产操作日志
#### Scenario: 业务失败写入 failed 日志
- **WHEN** 写操作执行过程中发生网关失败或数据库失败
- **THEN** 系统写入 `result_status=failed` 的资产操作日志,并记录错误码与错误摘要
#### Scenario: 权限或规则拒绝写入 denied 日志
- **WHEN** 操作被权限规则、保护期规则或业务前置条件拒绝
- **THEN** 系统写入 `result_status=denied` 的资产操作日志,并记录拒绝原因
### Requirement: 审计日志必须包含完整上下文
系统 SHALL 在资产日志中记录“谁、何时、做了什么、从什么变成什么”,并包含请求链路上下文。
#### Scenario: 记录操作人和时间
- **WHEN** 生成任一资产操作日志
- **THEN** 日志包含 `operator_id``operator_type``operator_name``created_at`
#### Scenario: 记录前后镜像
- **WHEN** 记录状态流转或配置修改类操作
- **THEN** 日志同时包含 `before_data``after_data`,可直接体现变更差异
#### Scenario: 记录请求上下文
- **WHEN** 记录资产操作日志
- **THEN** 日志包含 `request_id``ip_address``user_agent``request_path``request_method`
### Requirement: 审计写入异步且不阻塞主流程
系统 SHALL 采用异步方式写入资产审计日志,日志写入失败 MUST 不影响业务主流程结果。
#### Scenario: 异步写入
- **WHEN** 业务操作完成并触发审计记录
- **THEN** 主流程先返回业务结果,日志由异步流程落库
#### Scenario: 日志写入失败降级
- **WHEN** 资产日志落库失败
- **THEN** 系统仅记录 Error 级别应用日志,不回滚已成功的主业务操作
### Requirement: 敏感字段脱敏与日志体积控制
系统 SHALL 对敏感字段执行脱敏处理,并对日志体积设置上限,避免泄露与性能风险。
#### Scenario: 远程配置敏感字段脱敏
- **WHEN** 记录设备 WiFi/密码等敏感配置变更日志
- **THEN** `before_data`/`after_data` 中不得出现明文密码,仅保留掩码或摘要
#### Scenario: 超长数据裁剪
- **WHEN** 业务上下文数据超过日志体积阈值
- **THEN** 系统对超长字段进行裁剪并保留裁剪标记,保证日志写入稳定

View File

@@ -0,0 +1,35 @@
## ADDED Requirements
### Requirement: 自动停复机流程必须写入资产审计日志
系统 SHALL 在自动停机与自动复机流程中写入资产审计日志,且日志结果态 MUST 覆盖成功与失败。
#### Scenario: 自动停机成功写入日志
- **WHEN** 轮询判定流量耗尽并成功停机
- **THEN** 系统写入资产审计日志,记录操作类型、停机原因、变更前后网络状态与 `result_status=success`
#### Scenario: 自动停机失败写入日志
- **WHEN** 自动停机在重试后仍失败
- **THEN** 系统写入资产审计日志,记录 `result_status=failed`、错误摘要与重试信息摘要
#### Scenario: 自动复机成功写入日志
- **WHEN** 满足复机条件且自动复机成功
- **THEN** 系统写入资产审计日志,记录复机前后状态、触发来源与 `result_status=success`
#### Scenario: 自动复机失败写入日志
- **WHEN** 自动复机执行失败
- **THEN** 系统写入资产审计日志,记录 `result_status=failed` 与失败原因
### Requirement: 手动停复机必须与自动流程使用同一审计标准
系统 SHALL 对手动停机/复机使用与自动流程一致的资产审计字段规范,并在拒绝场景记录 denied 日志。
#### Scenario: 手动停机被拒绝时记录 denied 日志
- **WHEN** 用户手动停机因未实名或保护期规则被拒绝
- **THEN** 系统写入 `result_status=denied` 的资产审计日志,并记录拒绝原因
#### Scenario: 手动复机被拒绝时记录 denied 日志
- **WHEN** 用户手动复机因保护期规则被拒绝
- **THEN** 系统写入 `result_status=denied` 的资产审计日志,并记录拒绝原因
#### Scenario: 手动停复机成功时记录变更镜像
- **WHEN** 用户手动停机或复机成功
- **THEN** 系统在日志中记录 `before_data``after_data`,体现网络状态和停机原因的变化

View File

@@ -0,0 +1,31 @@
## ADDED Requirements
### Requirement: 设备敏感写操作必须写入资产审计日志
系统 SHALL 对设备能力中的敏感写操作写入资产域审计日志,包括但不限于:删除设备、绑定/解绑卡、批量分配/回收、设备停机/复机、远程控制(限速/WiFi/切卡/切卡模式/重启/恢复出厂)、批量导入任务创建。
#### Scenario: 设备分配与回收记录审计日志
- **WHEN** 运营人员执行设备批量分配或回收
- **THEN** 系统记录资产审计日志,包含目标设备列表、操作前后归属信息、操作结果
#### Scenario: 绑定与解绑记录审计日志
- **WHEN** 平台用户执行设备绑卡或解绑
- **THEN** 系统记录资产审计日志包含设备ID、卡ID、插槽信息和前后绑定状态
#### Scenario: 设备停复机记录审计日志
- **WHEN** 用户对设备执行停机或复机
- **THEN** 系统记录资产审计日志,包含处理卡数量、成功数、失败数、失败原因摘要
#### Scenario: 远程控制记录审计日志
- **WHEN** 用户执行限速、WiFi设置、切卡、切卡模式、重启、恢复出厂
- **THEN** 系统记录资产审计日志,包含操作类型、关键参数摘要、执行结果和错误信息(如失败)
### Requirement: 设备操作拒绝和失败场景也必须审计
系统 SHALL 在设备操作被拒绝或执行失败时同样写入审计日志,不得仅记录成功操作。
#### Scenario: 规则拒绝写入 denied 日志
- **WHEN** 设备操作因保护期或权限限制被拒绝
- **THEN** 系统写入 `result_status=denied` 的资产审计日志,并记录拒绝原因
#### Scenario: 网关或数据库失败写入 failed 日志
- **WHEN** 设备操作执行过程中出现网关调用失败或数据库更新失败
- **THEN** 系统写入 `result_status=failed` 的资产审计日志,并记录错误码与错误摘要