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

5.2 KiB
Raw Blame History

账号管理接口规格

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 及相关文件应被删除