Files
huang 80f560df33
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m17s
refactor(account): 统一账号管理API、完善权限检查和操作审计
- 合并 customer_account 和 shop_account 路由到统一的 account 接口
- 新增统一认证接口 (auth handler)
- 实现越权防护中间件和权限检查工具函数
- 新增操作审计日志模型和服务
- 更新数据库迁移 (版本 39: account_operation_log 表)
- 补充集成测试覆盖权限检查和审计日志场景
2026-02-02 17:23:20 +08:00

144 lines
5.2 KiB
Markdown
Raw Permalink 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.
# 账号管理接口规格
## ADDED Requirements
### Requirement: 统一账号管理路由结构
系统 SHALL 提供统一的账号管理路由,按账号类型分组。
#### Scenario: 平台账号管理路由
- **WHEN** 访问 /api/admin/accounts/platform/*
- **THEN** 提供平台账号的 CRUD + 角色管理功能
#### Scenario: 代理账号管理路由
- **WHEN** 访问 /api/admin/accounts/shop/*
- **THEN** 提供代理账号的 CRUD + 角色管理功能
#### Scenario: 企业账号管理路由
- **WHEN** 访问 /api/admin/accounts/enterprise/*
- **THEN** 提供企业账号的 CRUD + 角色管理功能
### Requirement: 所有账号类型支持完整的CRUD操作
系统 SHALL 为所有账号类型提供一致的 CRUD 功能。
#### Scenario: 创建账号
- **WHEN** POST /api/admin/accounts/{type}
- **THEN** 验证权限,创建账号,返回账号信息
#### Scenario: 查询账号列表
- **WHEN** GET /api/admin/accounts/{type}
- **THEN** 应用数据权限过滤,返回分页列表
#### Scenario: 查询账号详情
- **WHEN** GET /api/admin/accounts/{type}/:id
- **THEN** 验证权限,返回账号详情
#### Scenario: 更新账号
- **WHEN** PUT /api/admin/accounts/{type}/:id
- **THEN** 验证权限,更新账号,返回更新后信息
#### Scenario: 删除账号
- **WHEN** DELETE /api/admin/accounts/{type}/:id
- **THEN** 验证权限,软删除账号,返回成功
### Requirement: 所有账号类型支持密码和状态管理
系统 SHALL 为所有账号类型提供统一的密码和状态管理功能。
#### Scenario: 修改账号密码
- **WHEN** PUT /api/admin/accounts/{type}/:id/password
- **THEN** 验证权限更新密码bcrypt哈希返回成功
#### Scenario: 启用账号
- **WHEN** PUT /api/admin/accounts/{type}/:id/statusstatus=1
- **THEN** 验证权限,更新状态为启用,返回成功
#### Scenario: 禁用账号
- **WHEN** PUT /api/admin/accounts/{type}/:id/statusstatus=0
- **THEN** 验证权限,更新状态为禁用,返回成功
### Requirement: 所有账号类型支持角色管理
系统 SHALL 为所有账号类型提供统一的角色管理功能。
#### Scenario: 分配角色
- **WHEN** POST /api/admin/accounts/{type}/:id/rolesbody: {role_ids: [1,2]}
- **THEN** 验证权限,分配角色,返回成功
#### Scenario: 查询账号角色
- **WHEN** GET /api/admin/accounts/{type}/:id/roles
- **THEN** 验证权限,返回账号的所有角色列表
#### Scenario: 移除角色
- **WHEN** DELETE /api/admin/accounts/{type}/:id/roles/:role_id
- **THEN** 验证权限,软删除角色关联,返回成功
#### Scenario: 清空所有角色
- **WHEN** POST /api/admin/accounts/{type}/:id/rolesbody: {role_ids: []}
- **THEN** 验证权限,删除所有角色关联,返回成功
### Requirement: 删除旧路由避免冲突
系统 SHALL 删除旧的账号管理路由,避免与新路由冲突。
#### Scenario: 旧平台账号路由404
- **WHEN** 访问 POST /api/admin/platform-accounts
- **THEN** 返回 404 Not Found
#### Scenario: 旧代理账号路由404
- **WHEN** 访问 GET /api/admin/shop-accounts
- **THEN** 返回 404 Not Found
#### Scenario: 旧企业账号路由404
- **WHEN** 访问 POST /api/admin/customer-accounts
- **THEN** 返回 404 Not Found
### Requirement: 响应格式保持一致
系统 SHALL 为所有账号类型返回一致的响应格式。
#### Scenario: 创建响应包含完整账号信息
- **WHEN** 创建账号成功
- **THEN** 返回账号 ID、用户名、手机号、用户类型、状态、创建时间
#### Scenario: 列表响应包含分页信息
- **WHEN** 查询账号列表
- **THEN** 返回 {items, total, page, size}
#### Scenario: 错误响应使用统一格式
- **WHEN** 操作失败
- **THEN** 返回 {code, message, timestamp}
### Requirement: 支持按条件筛选账号列表
系统 SHALL 支持按多个条件筛选账号列表。
#### Scenario: 按用户名筛选
- **WHEN** GET /api/admin/accounts/{type}?username=张三
- **THEN** 返回用户名包含"张三"的账号列表
#### Scenario: 按手机号筛选
- **WHEN** GET /api/admin/accounts/{type}?phone=138
- **THEN** 返回手机号包含"138"的账号列表
#### Scenario: 按状态筛选
- **WHEN** GET /api/admin/accounts/{type}?status=1
- **THEN** 返回状态为启用的账号列表
#### Scenario: 按店铺ID筛选代理账号
- **WHEN** GET /api/admin/accounts/shop?shop_id=100
- **THEN** 返回 shop_id=100 的代理账号列表(需权限验证)
#### Scenario: 按企业ID筛选企业账号
- **WHEN** GET /api/admin/accounts/enterprise?enterprise_id=50
- **THEN** 返回 enterprise_id=50 的企业账号列表(需权限验证)
### Requirement: 统一Service层实现消除重复
系统 SHALL 使用单一 AccountService 处理所有账号类型,消除代码重复。
#### Scenario: AccountService处理所有账号类型
- **WHEN** 调用 AccountService.Create(ctx, req)
- **THEN** 根据 req.UserType 创建不同类型账号(平台、代理、企业)
#### Scenario: 删除ShopAccountService
- **WHEN** 系统重构完成
- **THEN** ShopAccountService 及相关文件应被删除
#### Scenario: 删除CustomerAccountService
- **WHEN** 系统重构完成
- **THEN** CustomerAccountService 及相关文件应被删除