Files
junhong_cmp_fiber/openspec/specs/unified-auth-api/spec.md
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

3.1 KiB
Raw Blame History

统一认证接口规格

ADDED Requirements

Requirement: 合并后台和H5认证接口

系统 SHALL 提供统一认证接口 /api/auth/*,支持后台和 H5 两种场景的认证。

Scenario: 后台用户登录

  • WHEN 用户调用 POST /api/auth/loginuser_type IN (1,2,3,4)
  • THEN 验证用户名+密码,返回 Access Token + Refresh Token

Scenario: H5用户登录

  • WHEN H5 用户调用 POST /api/auth/loginuser_type IN (3,4)
  • THEN 验证用户名+密码,返回 Access Token + Refresh Token

Scenario: 登出统一接口

  • WHEN 用户调用 POST /api/auth/logout
  • THEN 删除 Redis 中的 Token返回成功

Scenario: 刷新Token统一接口

  • WHEN 用户调用 POST /api/auth/refresh-token
  • THEN 验证 Refresh Token返回新的 Access Token

Scenario: 获取用户信息统一接口

  • WHEN 用户调用 GET /api/auth/me
  • THEN 返回当前用户信息,包含 menus 和 buttons

Requirement: 保留个人客户认证接口

系统 SHALL 保持个人客户认证接口 /api/c/v1/* 独立,不与后台/H5认证合并。

Scenario: 个人客户微信授权登录

  • WHEN 个人客户调用 POST /api/c/v1/wechat/auth
  • THEN 使用微信 OAuth 流程,返回 JWT Token

Scenario: 个人客户手机号登录

  • WHEN 个人客户调用 POST /api/c/v1/login
  • THEN 验证手机号+验证码,返回 JWT Token

Scenario: 个人客户获取资料

  • WHEN 个人客户调用 GET /api/c/v1/profile
  • THEN 返回个人客户资料(独立数据结构)

Requirement: 删除旧认证接口路由

系统 SHALL 删除 /api/admin/login、/api/h5/login 等旧路由,统一为 /api/auth/*。

Scenario: 旧后台登录接口404

  • WHEN 用户调用 POST /api/admin/login
  • THEN 返回 404 Not Found

Scenario: 旧H5登录接口404

  • WHEN 用户调用 POST /api/h5/login
  • THEN 返回 404 Not Found

Scenario: 新统一接口正常工作

  • WHEN 用户调用 POST /api/auth/login
  • THEN 正常认证,返回 200 OK

Requirement: 认证逻辑保持不变

系统 SHALL 保持认证逻辑不变,只修改路由路径。

Scenario: Token生成逻辑不变

  • WHEN 用户登录成功
  • THEN 生成相同格式的 Access Token24小时和 Refresh Token7天

Scenario: Token存储在Redis

  • WHEN 生成 Token
  • THEN 存储在 RedisKey 格式为 "auth:token:{token}"

Scenario: 用户类型过滤不变

  • WHEN 登录请求中包含 user_type
  • THEN 验证用户类型是否与账号类型匹配

Requirement: 响应格式保持兼容

系统 SHALL 保持登录响应格式兼容,包含 menus 和 buttons。

Scenario: 登录响应包含菜单

  • WHEN 用户登录成功
  • THEN 响应应包含 menus菜单树结构

Scenario: 登录响应包含按钮权限

  • WHEN 用户登录成功
  • THEN 响应应包含 buttons按钮权限列表

Scenario: 响应格式不变

  • WHEN 用户登录成功
  • THEN 响应格式应与旧接口完全一致,前端无需修改解析逻辑