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

87 lines
3.1 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.
# 统一认证接口规格
## 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** 响应格式应与旧接口完全一致,前端无需修改解析逻辑