Files
junhong_cmp_fiber/openspec/changes/add-phone-asset-associations/design.md
break 370fd3e67f
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
update
2026-09-03 09:28:28 +08:00

32 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Context
现有 H5 已有手机号绑定与全局开关;新关系不能由后台或换货推测建立。
## Decisions
- 新表以手机号、资产和有效状态保存关系,并对当前有效关系实施十项计数与唯一约束。
- 验证/换绑在事务内锁定相关手机号关系;换绑先检查总数再整体迁移。
- 批量导入复用逐行任务,读取按资产数据范围,日志仅保留脱敏手机号。
## H5 与后台动作契约
### H5 建联与换绑
- 既有登录签发 token 时,按全局强制绑定开关及当前访问资产查询有效关联;开关开启且当前手机号未关联该资产时,响应 `need_bind_phone=true`,并限制依赖该资产的业务入口直至验证成功。开关关闭时不创建新关联,也不删除历史关联。
- 既有 `bind_phone` 短信场景验证成功后事务中锁定手机号和资产有效关系同一手机号—资产已有效关联则幂等成功否则先计算该手机号有效资产数。达到十项返回“该手机号最多关联10项有效资产”不写关联或手机号变更。
- 既有 `change_phone_old``change_phone_new` 两个验证码均验证成功后,事务锁定旧、新手机号关系;计算新号码当前有效关系数加旧号码待迁移有效关系数,超过十项则整体失败。通过时把旧号码全部有效关系原子失效/迁移至新号码,并记录旧、新号码脱敏审计;任一步失败不变更任一关系。
### 后台查看与解除
- `GET /phone-asset-associations`:仅超级管理员、平台用户,先按资产数据范围过滤;支持资产标识、手机号(仅权限内完整值)、关联状态、创建时间筛选,返回资产、手机号、建立时间、建立来源固定为 `h5_sms_verification` 和状态。
- `DELETE /phone-asset-associations/:id`:请求必须含 `reason`1500 字符)和二次确认;锁定指定有效关联后复核资产数据范围,标记失效并审计操作者、资产、脱敏手机号、原因和时间。后台没有创建/补录接口。
- `POST /phone-asset-associations/batch-unbind`:请求去重的资产集合、原因、二次确认;每个资产独立解除其全部有效关系,返回成功数、失败数与逐资产结果。越权、资产不存在和已无有效关系对调用方使用统一失败文案。
- Excel 解绑复用既有异步导入:每行按资产标识处理,独立授权与事务,任务持久化行号、结果和失败原因;一行失败不得回滚已成功行。
### 边界
- 换货、资产导入、后台资产编辑和个人客户主手机号历史记录均不得创建、推断、复制或迁移该关系。新换货资产在首次 H5 访问时才依当前开关走验证。
## Migration Plan
新增成对迁移,不回填;隔离库验证开关、上限、换绑、权限解绑、换货边界及 up/down/up。