All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
2.8 KiB
2.8 KiB
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(1~500 字符)和二次确认;锁定指定有效关联后复核资产数据范围,标记失效并审计操作者、资产、脱敏手机号、原因和时间。后台没有创建/补录接口。POST /phone-asset-associations/batch-unbind:请求去重的资产集合、原因、二次确认;每个资产独立解除其全部有效关系,返回成功数、失败数与逐资产结果。越权、资产不存在和已无有效关系对调用方使用统一失败文案。- Excel 解绑复用既有异步导入:每行按资产标识处理,独立授权与事务,任务持久化行号、结果和失败原因;一行失败不得回滚已成功行。
边界
- 换货、资产导入、后台资产编辑和个人客户主手机号历史记录均不得创建、推断、复制或迁移该关系。新换货资产在首次 H5 访问时才依当前开关走验证。
Migration Plan
新增成对迁移,不回填;隔离库验证开关、上限、换绑、权限解绑、换货边界及 up/down/up。