Files
zyt/artifacts/diagnosis-edit-masked-phone-validation.md
T
2026-10-17 16:08:24 +08:00

2.3 KiB
Raw Blame History

医生编辑诊单提示“请输入手机号”验证

日期:2026-10-17。

结论与修改

无 tcm.diagnosis/phonePlain 权限的医生只能看到脱敏手机号,桌面编辑器按既有隐私规则在保存时省略 phone、id_card。后端编辑场景继承了手机号的无条件必填规则,导致保存被拦截。

已修改 server/app/adminapi/validate/tcm/DiagnosisValidate.php:编辑场景允许省略受保护或被锁定的基本字段,省略即保留原值;主动提交的字段仍须非空且格式正确。新增诊单必填规则、明文权限、订单基本信息锁保持。桌面业务代码无需修改,仅增加回归。

后端详细覆盖与结果见 后端报告。

实际跨层核对

使用桌面测试数据构造无明文权限的医生编辑器,从真实 DiagnosisDialog 保存,经真实 RemoteDoctorRepository、ApiClient,用 httpx.MockTransport 捕获发送到 tcm.diagnosis/edit 的 JSON。临床修改已保留,手机号和身份证字段均缺省。数据为测试样例,无真实网络请求。

将这份原样请求交给真实 PHP 编辑校验器,仅替换诊单存在性数据库查询:

  • HEAD 原校验器稳定复现“请输入手机号”。
  • 修复后校验通过。
  • 测试脚本:.codex-tasks/diagnosis-edit-cross-layer-check.php;捕获请求为同目录 diagnosis-edit-masked-payload.json。

回归结果

验证 结果
桌面新增回归:无明文权限、有/无基本信息锁保存;有明文权限时格式及重复检查 3 passed
pytest -o addopts= tests/test_diagnosis_drawer_visual.py tests/test_diagnosis_detail_contract.py tests/test_diagnosis_loading.py --tb=short 68 passed,exit 0
ruff check tests/test_diagnosis_drawer_visual.py 通过
PHP 编辑、新增、行级授权、AI 处方权限、AI 分析安全离线回归 5 个脚本通过
真实桌面请求对照原/新 PHP 校验器 原校验复现错误,新校验通过

桌面完整回归期间 Qt 媒体加载记录过 0xc0000139 原生日志;进程继续完成全部测试并以 0 退出。本次未修改相关媒体代码。

未登录生产、未写真实数据库、未执行部署。本修复需服务端更新后生效,医生无需补录明文手机号。