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

2.8 KiB
Raw Blame History

Context

现有 H5 已有手机号绑定与全局开关;新关系不能由后台或换货推测建立。

Decisions

  • 新表以手机号、资产和有效状态保存关系,并对当前有效关系实施十项计数与唯一约束。
  • 验证/换绑在事务内锁定相关手机号关系;换绑先检查总数再整体迁移。
  • 批量导入复用逐行任务,读取按资产数据范围,日志仅保留脱敏手机号。

H5 与后台动作契约

H5 建联与换绑

  • 既有登录签发 token 时,按全局强制绑定开关及当前访问资产查询有效关联;开关开启且当前手机号未关联该资产时,响应 need_bind_phone=true,并限制依赖该资产的业务入口直至验证成功。开关关闭时不创建新关联,也不删除历史关联。
  • 既有 bind_phone 短信场景验证成功后事务中锁定手机号和资产有效关系同一手机号—资产已有效关联则幂等成功否则先计算该手机号有效资产数。达到十项返回“该手机号最多关联10项有效资产”不写关联或手机号变更。
  • 既有 change_phone_oldchange_phone_new 两个验证码均验证成功后,事务锁定旧、新手机号关系;计算新号码当前有效关系数加旧号码待迁移有效关系数,超过十项则整体失败。通过时把旧号码全部有效关系原子失效/迁移至新号码,并记录旧、新号码脱敏审计;任一步失败不变更任一关系。

后台查看与解除

  • GET /phone-asset-associations:仅超级管理员、平台用户,先按资产数据范围过滤;支持资产标识、手机号(仅权限内完整值)、关联状态、创建时间筛选,返回资产、手机号、建立时间、建立来源固定为 h5_sms_verification 和状态。
  • DELETE /phone-asset-associations/:id:请求必须含 reason1500 字符)和二次确认;锁定指定有效关联后复核资产数据范围,标记失效并审计操作者、资产、脱敏手机号、原因和时间。后台没有创建/补录接口。
  • POST /phone-asset-associations/batch-unbind:请求去重的资产集合、原因、二次确认;每个资产独立解除其全部有效关系,返回成功数、失败数与逐资产结果。越权、资产不存在和已无有效关系对调用方使用统一失败文案。
  • Excel 解绑复用既有异步导入:每行按资产标识处理,独立授权与事务,任务持久化行号、结果和失败原因;一行失败不得回滚已成功行。

边界

  • 换货、资产导入、后台资产编辑和个人客户主手机号历史记录均不得创建、推断、复制或迁移该关系。新换货资产在首次 H5 访问时才依当前开关走验证。

Migration Plan

新增成对迁移,不回填;隔离库验证开关、上限、换绑、权限解绑、换货边界及 up/down/up。