Files
junhong_cmp_fiber/docs/ur60-shop-phone-search/功能总结.md

55 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# UR#60 店铺列表参数与权限修复总结
## 本次交付范围
本次完成当前可由 Agent 执行的两个纵向切片:
- Ticket 01修复 `GET /api/admin/shops` 的完整查询参数校验与默认分页一致性。
- Ticket 03禁止企业账号访问店铺列表、创建、更新、删除和联级查询五个核心店铺管理入口。
联系电话精确查询、数据库索引和跨仓前端交付属于 Ticket 02。该票当前状态为 `ready-for-human`,本次未实现、未迁移,也未提前修改店铺查询条件或数据库结构。
## 参数与分页契约
店铺列表在查询参数解析后执行完整 DTO 校验。解析失败或任一字段违反约束时,客户端统一收到:
```json
{
"code": 1001,
"msg": "参数验证失败",
"data": null,
"timestamp": "RFC3339 时间"
}
```
具体解析或 Validator 错误只写入服务端日志,不返回给客户端。未传分页参数时,请求在进入 Service 前归一化为 `page=1``page_size=20`,数据库查询参数与响应中的 `page``size` 保持一致;显式合法分页值原样生效。
## 核心店铺管理权限
企业账号访问以下入口统一收到 HTTP 403、`code=1005``msg=无权限访问店铺管理功能`
- `GET /api/admin/shops`
- `POST /api/admin/shops`
- `PUT /api/admin/shops/:id`
- `DELETE /api/admin/shops/:id`
- `GET /api/admin/shops/cascade`
限制通过逐路由 Handler 包装实现,不使用 `/shops` 前缀组中间件,避免误伤店铺角色、资金、佣金、提现和钱包流水等独立路由。超级管理员、平台账号和代理账号保留原有核心列表访问能力,代理账号继续使用既有店铺及下级范围过滤。
## 架构与迁移边界
实现继续沿用现有 `Handler → Service → Store → GORM/DTO` 读取链路,只修改请求校验、分页归一化和路由权限边界。未迁移店铺模块到 DDD 或 Query 目录,未修改其他 Handler 的校验方式,也未新增缓存、审计业务日志、幂等控制、异步任务或数据库迁移。
## 验证证据
HTTP 集成测试在进程内启动 Fiber App通过真实 Redis Token 状态、后台认证中间件、真实 PostgreSQL、Handler、Service、Store、GORM 和统一错误处理验证:
- 非法分页、层级、状态、超长名称或编号及解析失败均返回统一参数错误。
- 默认分页返回第 1 页、每页 20 条,显式合法分页不被重置。
- 未认证和无效 Token 保持既有认证错误契约。
- 企业账号在五个核心入口进入 Handler 前被拒绝。
- 超级管理员、平台账号和代理账号保留列表访问能力。
- 店铺角色路由未被核心店铺管理权限包装误拦截。
测试使用唯一 Redis Token 并在结束后清理,不打印 `.env.local` 中的数据库、Redis 或 JWT 敏感配置。