修复店铺列表参数校验与企业权限
This commit is contained in:
@@ -22310,6 +22310,7 @@ paths:
|
||||
- 代理系列授权
|
||||
/api/admin/shops:
|
||||
get:
|
||||
description: 仅超级管理员、平台账号和代理账号可访问,企业账号返回 403。分页默认第 1 页、每页 20 条;page 最小为 1,page_size 范围为 1 至 100。所有筛选条件在查询前统一校验。
|
||||
parameters:
|
||||
- description: 页码
|
||||
in: query
|
||||
@@ -22421,6 +22422,7 @@ paths:
|
||||
tags:
|
||||
- 店铺管理
|
||||
post:
|
||||
description: 仅超级管理员、平台账号和代理账号可访问,企业账号返回 403。
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
@@ -22484,6 +22486,7 @@ paths:
|
||||
- 店铺管理
|
||||
/api/admin/shops/{id}:
|
||||
delete:
|
||||
description: 仅超级管理员、平台账号和代理账号可访问,企业账号返回 403。
|
||||
parameters:
|
||||
- description: ID
|
||||
in: path
|
||||
@@ -22524,6 +22527,7 @@ paths:
|
||||
tags:
|
||||
- 店铺管理
|
||||
put:
|
||||
description: 仅超级管理员、平台账号和代理账号可访问,企业账号返回 403。
|
||||
parameters:
|
||||
- description: ID
|
||||
in: path
|
||||
@@ -23345,6 +23349,7 @@ paths:
|
||||
- 代理商资金管理
|
||||
/api/admin/shops/cascade:
|
||||
get:
|
||||
description: 仅超级管理员、平台账号和代理账号可访问,企业账号返回 403。
|
||||
parameters:
|
||||
- description: 店铺名称(模糊查询)
|
||||
in: query
|
||||
|
||||
54
docs/ur60-shop-phone-search/功能总结.md
Normal file
54
docs/ur60-shop-phone-search/功能总结.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# 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 敏感配置。
|
||||
Reference in New Issue
Block a user