feat: strengthen risk controls and review workflows

This commit is contained in:
hectorzhao
2026-07-26 13:08:12 +08:00
parent b461532075
commit 2ce682c3fc
34 changed files with 2167 additions and 390 deletions
+38
View File
@@ -3669,6 +3669,17 @@ npm run verify:phase8
| TC-UIUX-P0-004 | 依次设置768×1024、1366×768、1440×900并复核同一用户。 | 平板四项操作全部可见且热区≥44px;1440首屏完整;1366即使存在内部横向滚动,滚动后删除必须完整可达,且页面级无横向溢出。 |
| TC-UIUX-P0-005 | 完成五视口操作后检查浏览器控制台并执行前端/API构建与用户服务回归。 | 无新增console error/warn;前端与API build通过,用户服务测试通过,`git diff --check`通过。 |
### 17.17 用户登录标识复用、组合查询与管理员保护提示
| 用例编号 | 操作 | 预期结果 |
| --- | --- | --- |
| TC-USER-REUSE-001 | 新建用户名`zhaohui`,逻辑删除后再次使用同一用户名、邮箱或手机号新建用户。 | 新用户创建成功且主键与旧用户不同;旧用户及其OperationLog、审核关联保持原用户主键;登录只命中新用户。 |
| TC-USER-REUSE-002 | 两个未删除用户并发提交相同用户名、邮箱或手机号。 | PostgreSQL仅允许一个请求成功,另一个返回HTTP 409、`USER_DUPLICATE`、冲突字段和中文提示,不产生两个活动账号。 |
| TC-USER-FILTER-001 | 在运营端分别及组合填写用户姓名、登录账号、所属企业、用户角色和状态,点击查询,再点击重置。 | 每次操作请求真实`GET /api/admin/users`;条件分别生效,组合使用AND,登录账号匹配用户名/邮箱/手机号;重置返回全部未删除用户。 |
| TC-USER-FILTER-002 | 在客户端分别及组合填写用户姓名、登录账号和状态。 | 请求真实`GET /api/client/users`;只返回当前企业管理员,无法通过查询参数跨租户或查询平台管理员。 |
| TC-USER-CONTINUITY-UI-001 | 删除、禁用或降权最后一个平台管理员及某企业最后一个启用管理员。 | 后端返回权威冲突;确认弹窗保持打开并显示红色可访问错误及“先创建或启用另一名管理员”建议,按钮结束忙碌状态,浏览器无未处理Promise。 |
| TC-USER-CONTINUITY-UI-002 | 为相同范围增加另一名启用管理员后重复删除或禁用。 | 操作成功、弹窗关闭、列表按当前已应用查询条件刷新,并写入对应OperationLog。 |
### 17.17 2026-07-21 下游连接恢复与历史回执回填
| 用例编号 | 操作 | 预期结果 |
@@ -3815,3 +3826,30 @@ npm run verify:phase8
- `TC-DELIVERY-AUTO-014`:分别配置仅CMPP、仅HTTP、CMPP+HTTP、两者均关闭四种应用状态;回执与上行分别只产生CMPP下游记录、HTTP Webhook事件、两者各一条、均不产生。修改历史手工投递模式不得改变自动计算结果。
- `TC-HTTP-WEBHOOK-015`:运营端关闭HTTP接口后,回执和上行Webhook地址输入框仍显示且可保存;任一地址保存为空时删除对应有效端点,后续不推送该类HTTP事件,另一非空地址不受影响。
- `TC-PROTOCOL-LOG-016`:在线企业应用收到回执或上行 `CMPP_DELIVER` 并返回 `CMPP_DELIVER_RESP`;通讯日志各出现一条“平台→企业应用/DELIVER”和“企业应用→平台/DELIVER_RESP”,结果、消息号、序列号和投递记录一致,下游投递记录仍独立展示发送、ACK和重试状态。
## 2026-07-26 企业应用停用与回执清算专项
- `APP-DISABLE-001`:应用无待清算数据时点击停用,直接进入已停用并断开该账号全部CMPP连接。
- `APP-DISABLE-002`:存在等待供应商回执、待推送、待ACK或可重试失败记录时,停用弹窗展示真实分类数量,并提供等待与强制停用两个操作。
- `APP-DISABLE-003`:选择等待后进入`disabling`;新Submit同步返回非成功响应且不创建短信记录,历史回执仍可通过原连接或重新连接推送。
- `APP-DISABLE-004`:停用中状态悬停、聚焦时展示原因、分类数量、进入时间和72小时自动停用时间。
- `APP-DISABLE-005`:停用中点击启用恢复`active`,清除`disablingAt/autoDisableAt`,旧扫描任务不得再次将其停用。
- `APP-DISABLE-006`:选择强制停用后,未完成投递及尝试标记`abandoned`、停止重试,并断开同账号的所有CMPP连接。
- `APP-DISABLE-007`:从进入停用中满72小时仍有待清算数据时,系统自动执行强制停用;API/Gateway重启不影响截止时间。
- `APP-DISABLE-008`:停用后新到供应商回执仍更新短信终态和保存原始回执,但下游投递直接记为`abandoned`。
- `APP-DISABLE-009`:企业存在`active/disabling`应用时删除失败;全部应用为`disabled/deleted`后允许删除。
- `APP-DISABLE-010`:企业或应用已停用后,Gateway仍可读取此前已形成的pending回执,不再返回账户无效导致投递死锁。
## 2026-07-26 风控与短信人工审核专项
- `RISK-RULE-001`:规则页只展示单任务最大号码数、非工作时间营销批量和10分钟客户端任务频控;重复、非法号码比例、黑名单比例和模板变量规则不展示且不参与计算。
- `RISK-RULE-002`:同编码同时存在全局和企业应用级规则时,目标应用使用应用级阈值,其他应用继承全局;停用应用级规则后回落到全局。
- `RISK-RULE-003`:修改阈值、动作、状态、优先级和非工作开始/结束时间后重新查询与数据库一致;非法编码、负阈值、同范围重复规则和相同起止时间被后端拒绝。
- `RISK-FREQ-004`:同一应用10分钟内已有N个客户端批次时,第N+1个客户端任务命中;同期CMPP、HTTP、运营通道测试及风险预检数量不影响结果,另一应用任务也不影响。
- `PHONE-VALID-005``10000000000`视为合法基础格式并继续号段/路由处理;非1开头、非11位或包含非数字字符的号码被确定性拦截。
- `PHONE-BLOCK-006`:客户端/HTTP混合提交合法、非法、平台黑名单和企业应用黑名单号码;合法号码入队,三类拦截号码均为`submit_failed/rejected`、金额0且没有上游提交。
- `PHONE-BLOCK-007`:CMPP多目的提交混合合法、非法和黑名单号码;Submit被平台受理后,非法/黑名单号码各生成一条`REJECTD`失败回执并投递客户,合法号码继续发送。
- `TEMPLATE-VAR-008`:已人工审核模板在本次发送缺少必填变量或多传未定义变量时直接拒绝并列出变量名,不生成待人工审核任务;变量完整时正常继续。
- `SMS-REVIEW-009`:待审核列表只含`pending_review`;人工通过/驳回列表只含`reviewedById`非空记录,自动放行和自动拒绝均不出现。
- `SMS-REVIEW-010`:点击号码数量后,通过真实后端分页查看手机号码、归属地、运营商和短信状态;号码搜索与10/20/50条分页正确,接口同时兼容`reviewTaskId`和批次`riskTaskId`关联。
- `SMS-REVIEW-011`:客户端和CMPP待审核任务创建时短信记录保存`reviewTaskId`;人工通过后短信由`pending_review`转为`queued`并入队,人工驳回后转拒绝且执行既有资金释放,不能只更新审核任务。
- `SMS-REVIEW-012`:升级前历史`pending_review`异常记录保持原样,不执行数据修复或短信补发;升级后新任务不再产生审核任务与短信状态不一致。