2.3 KiB
2.3 KiB
医生编辑诊单提示“请输入手机号”验证
日期: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 退出。本次未修改相关媒体代码。
未登录生产、未写真实数据库、未执行部署。本修复需服务端更新后生效,医生无需补录明文手机号。