From 965e12cbcc29fd7418b5ca037ae06738b54bb9bc Mon Sep 17 00:00:00 2001 From: czl231 <3286836406@qq.com> Date: Sat, 29 Aug 2026 20:55:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=85=8D=E9=80=81=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E8=81=94=E7=B3=BB=E4=BA=BA=E6=98=8E=E6=96=87=E5=B1=95?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/api/internal/logic/delivery/order.go | 27 +++++++++++++-- .../logic/delivery/order_contact_test.go | 28 ++++++++++++++++ docs/07-配送点管理系统需求.md | 1 + docs/11-数据接口与安全.md | 2 +- docs/12-验收与迭代规划.md | 2 +- ...作日志_配送点订单联系人明文展示_20260829.md | 33 +++++++++++++++++++ 6 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 backend/api/internal/logic/delivery/order_contact_test.go create mode 100644 docs/操作日志_配送点订单联系人明文展示_20260829.md diff --git a/backend/api/internal/logic/delivery/order.go b/backend/api/internal/logic/delivery/order.go index 73efd43..9e62fb5 100644 --- a/backend/api/internal/logic/delivery/order.go +++ b/backend/api/internal/logic/delivery/order.go @@ -1,5 +1,5 @@ // 功能描述:实现配送点范围内的合同、合同气瓶和配送订单接口。 -// 版本:v1.3.0。 +// 版本:v1.4.0。 package delivery import ( @@ -387,7 +387,30 @@ func ListOrder(ctx *gin.Context) { infra.Response.Error(ctx, err) return } - infra.Response.Success(ctx, gin.H{"total": total, "list": response}) + infra.Response.Success(ctx, gin.H{"total": total, "list": restoreDeliveryOrderListContacts(response, orders)}) +} + +// restoreDeliveryOrderListContacts 为当前配送点管理员恢复本点订单联系人快照明文。 +// 调用前订单必须已经按当前配送点完成范围过滤,避免跨配送点暴露联系人信息。 +func restoreDeliveryOrderListContacts(response any, orders []models.GasorderBasic) any { + list, ok := response.([]any) + if !ok { + return response + } + for index, item := range list { + if index >= len(orders) { + break + } + record, ok := item.(map[string]any) + if !ok { + continue + } + record["contact_name"] = orders[index].ContactName + record["contact_phone"] = orders[index].ContactPhone + delete(record, "contact_name_masked") + delete(record, "contact_phone_masked") + } + return response } func GetOrder(ctx *gin.Context) { diff --git a/backend/api/internal/logic/delivery/order_contact_test.go b/backend/api/internal/logic/delivery/order_contact_test.go new file mode 100644 index 0000000..8b79139 --- /dev/null +++ b/backend/api/internal/logic/delivery/order_contact_test.go @@ -0,0 +1,28 @@ +// 功能描述:验证配送点订单列表仅恢复当前分页订单的联系人明文。 +// 版本:v1.0.0。 +package delivery + +import ( + "testing" + + "git.apinb.com/heqiapp/platforms/backend/api/internal/models" +) + +// TestRestoreDeliveryOrderListContacts 验证明文字段覆盖脱敏辅助字段且保持分页顺序。 +func TestRestoreDeliveryOrderListContacts(t *testing.T) { + response := []any{ + map[string]any{"identity": "order-1", "contact_name_masked": "张*", "contact_phone_masked": "138****8000"}, + } + orders := []models.GasorderBasic{{ContactName: "张三", ContactPhone: "13800138000"}} + restored := restoreDeliveryOrderListContacts(response, orders).([]any) + record := restored[0].(map[string]any) + if record["contact_name"] != "张三" || record["contact_phone"] != "13800138000" { + t.Fatalf("配送点订单联系人未恢复明文:%#v", record) + } + if _, exists := record["contact_name_masked"]; exists { + t.Fatalf("联系人姓名脱敏辅助字段未删除:%#v", record) + } + if _, exists := record["contact_phone_masked"]; exists { + t.Fatalf("联系人电话脱敏辅助字段未删除:%#v", record) + } +} diff --git a/docs/07-配送点管理系统需求.md b/docs/07-配送点管理系统需求.md index 235236b..b42ae1f 100644 --- a/docs/07-配送点管理系统需求.md +++ b/docs/07-配送点管理系统需求.md @@ -132,6 +132,7 @@ Global: - 至少有一条启用且未过期的资质。 - 不支持跨配送点调度。 - 配送点后台可执行:创建、分配、回收、改派、调整金额、标记异常、恢复、取消。 +- 当前配送点启用状态的管理员可在本点订单列表和详情中查看订单联系人姓名、联系电话快照明文,用于履约联系;服务端必须先校验订单属于当前配送点。 - 配送点后台不得执行:开始罐装、罐装完成、开始配送、到达、等待签收、完成订单。 - App 产生的定位、扫码、照片、视频、签名、收款、签收和现场证据只读,后台不得补造或修改。 diff --git a/docs/11-数据接口与安全.md b/docs/11-数据接口与安全.md index 05e75a5..5f5b936 100644 --- a/docs/11-数据接口与安全.md +++ b/docs/11-数据接口与安全.md @@ -95,7 +95,7 @@ - 登录令牌短期有效,刷新令牌可撤销;后台高权限账号启用 MFA、IP/设备策略。平台后台管理的平台、气站、配送、员工和业主账号密码按当前实施口径仅要求不少于 6 个字符,不附加复杂度校验。 - 权限校验在服务端执行,前端菜单隐藏不构成权限控制。按角色、站点、区域、对象归属联合鉴权。 -- 手机号、地址、身份证明、收款账户、定位、视频为敏感数据:传输 TLS、存储加密/字段加密、访问留痕、最小化留存。默认响应继续脱敏;仅已通过平台总后台 JWT 和对应菜单权限校验的管理员,可在用户、工作人员和平台账户的列表与详情中查看姓名、显示名称和主手机号明文。用户地址资源另设最小范围例外:仅 `/user_address` 的受控列表与详情接口可向具备对应菜单权限的平台管理员返回完整地址及经纬度,用于地址维护和编辑回填。配送订单联系人另设详情级例外:仅 `/gasorder_basic/:identity` 平台详情接口可返回订单联系人姓名和联系电话明文,列表与其他终端继续脱敏。上述例外不放宽身份证明、头像、资质编号或收款账户的脱敏规则。 +- 手机号、地址、身份证明、收款账户、定位、视频为敏感数据:传输 TLS、存储加密/字段加密、访问留痕、最小化留存。默认响应继续脱敏;仅已通过平台总后台 JWT 和对应菜单权限校验的管理员,可在用户、工作人员和平台账户的列表与详情中查看姓名、显示名称和主手机号明文。用户地址资源另设最小范围例外:仅 `/user_address` 的受控列表与详情接口可向具备对应菜单权限的平台管理员返回完整地址及经纬度,用于地址维护和编辑回填。配送订单联系人另设业务后台例外:平台订单详情可返回联系人姓名和联系电话明文;配送点后台的启用管理员可在严格限定当前配送点订单范围后,于列表和详情查看联系人快照明文。平台订单列表、气站端、用户端和工作人员端继续脱敏。上述例外不放宽身份证明、头像、资质编号或收款账户的脱敏规则。 - 所有支付回调验证签名与金额、订单、商户号一致性;合同文件使用可信第三方原文与哈希存证。渠道回调入口为 `/heqi/payment-return/v1/{alipay|wechat}/notify`,不使用用户 JWT;必须完成渠道证书验签、商户/appid、平台支付单号、金额、币种和状态校验后才可在数据库事务中推进业务。重复通知必须幂等,原始敏感报文只保存摘要。 - `payment_order` 是统一支付尝试事实;`payment_refund` 与 `payment_refund_item` 保存用户退款申请及明细。审批通过与钱包入账必须同事务完成。 - 图片/视频上传做文件类型、大小、病毒/恶意内容检测;访问采用短期授权,不使用公开桶。 diff --git a/docs/12-验收与迭代规划.md b/docs/12-验收与迭代规划.md index 598916a..b302e35 100644 --- a/docs/12-验收与迭代规划.md +++ b/docs/12-验收与迭代规划.md @@ -46,7 +46,7 @@ - 可用性:安全告警、设备控制、支付回调等关键链路定义 SLO 和降级方案;上线前完成故障演练。 - 性能:以目标设备数量、每设备上报频率、峰值下单量、消息量为基准压测;容量指标须在立项时量化。 - 安全:完成权限越权、支付回调伪造、设备身份伪造、文件上传、敏感信息泄漏和常见 Web/App 攻击测试。 -- 隐私展示:平台总后台通过 JWT 和菜单鉴权后,用户、工作人员和平台账户列表与详情可显示姓名、显示名称和主手机号明文;配送订单联系人仅在平台订单详情显示明文,订单列表继续脱敏;其他终端、未授权请求及身份证明、地址、头像、资质编号和收款账户仍保持脱敏或不返回。 +- 隐私展示:平台总后台通过 JWT 和菜单鉴权后,用户、工作人员和平台账户列表与详情可显示姓名、显示名称和主手机号明文;平台配送订单联系人仅在详情显示明文。配送点后台启用管理员可在当前配送点订单列表和详情中查看联系人快照明文;跨配送点请求及气站端、用户端、工作人员端继续脱敏。未授权请求及身份证明、地址、头像、资质编号和收款账户仍保持脱敏或不返回。 - 可观测性:每个关键请求可用 `request_id` 串联;每个设备命令、告警和订单状态可定位日志、指标和事件。 - 可用性与无障碍:移动端具备弱网提示、重要操作反馈、可读的风险颜色与文字;后台关键表格可键盘操作。 diff --git a/docs/操作日志_配送点订单联系人明文展示_20260829.md b/docs/操作日志_配送点订单联系人明文展示_20260829.md new file mode 100644 index 0000000..37d9543 --- /dev/null +++ b/docs/操作日志_配送点订单联系人明文展示_20260829.md @@ -0,0 +1,33 @@ +# 操作日志:配送点订单联系人明文展示 + +操作时间:2026-08-29 +操作类型:修改 +影响模块:5176 配送点订单列表、配送订单联系人响应 + +## 操作前状态 + +- 配送点管理员只能在订单列表看到脱敏联系人姓名和联系电话。 +- 订单详情实际已显示明文,但文档仍声明配送点端应保持脱敏。 + +## 具体操作 + +1. 配送订单完成当前配送点范围过滤后,恢复当前页订单的联系人姓名和联系电话快照明文。 +2. 删除同一响应中的 `contact_name_masked`、`contact_phone_masked` 辅助字段,避免重复展示。 +3. 增加专项测试并同步配送点需求、安全规范和验收规则。 + +## 行为变化 + +- 变更前:5176 订单列表显示 `测*`、`***`。 +- 变更后:5176 当前配送点订单列表显示完整联系人姓名和联系电话。 +- 其他配送点订单不可访问;平台列表、气站端、用户端和工作人员端的脱敏规则不变。 + +## 验证结果 + +- `go test ./api/internal/logic/delivery ./api/internal/logic/platform/gasorder ./api/internal/logic/common`:通过。 +- 专项测试覆盖联系人姓名、联系电话明文恢复及脱敏辅助字段删除。 +- 后端已重新构建并恢复监听 `12426`,旧程序备份为 `platform-api.before-delivery-contact-retry-20260829-204655.exe`。 + +## 风险评估 + +- 明文仅在配送点管理员已鉴权且订单属于当前配送点后恢复。 +- 未修改全局脱敏函数,其他接口不会因本次变更扩大敏感信息范围。