cursor-init/prd/M2-基础用户系统-接口设计.md
expressgy 2518986557 feat(docs): 完成星撰平台M2基础用户系统完整设计文档体系
 新增功能设计文档:
- M2基础用户系统数据库设计(12个核心表,RBAC权限模型)
- M2基础用户系统接口设计(41个API接口,含排序功能)
- 完整的项目需求文档和开发计划

📚 核心文档结构:
- 数据库设计:支持树形结构、软删除、审计日志的完整用户权限体系
- 接口设计:包含认证、用户管理、角色权限、组织架构、字典标签等9大模块
- 排序功能:新增7个排序接口,支持拖拽和批量操作
- 项目规划:从MVP到完整生态的4阶段开发计划

🔧 技术栈确定:
- 后端:Elysia + Bun.js + MySQL + Redis + Elasticsearch
- 前端:Vue.js/React + TypeScript
- 部署:Docker + Docker Compose
- 测试:Vitest + 完整测试规范

📋 设计亮点:
- 无外键约束设计,应用层维护数据完整性
- 树形结构支持(path、level字段优化查询)
- 完整的权限继承机制和权限快照
- 支持root超级管理员和多级角色体系
- 标签系统和智能推荐功能
- 统一的响应格式和错误码规范

🎯 覆盖功能:
- 用户认证与管理(注册、登录、权限控制)
- RBAC角色权限体系(树形角色、权限继承)
- 组织架构管理(多级组织、人员分配)
- 数据字典与标签系统
- 完整的排序和数据导入导出功能

📈 文档规模:
- 数据库设计:38KB,922行
- 接口设计:55KB,3024行
- 总计:约100KB的详细技术文档

🔄 配套更新:
- 更新Elysia后端开发规范
- 完善健康检查控制器
- 统一项目代码规范和注释规范
2025-06-29 03:11:35 +08:00

3024 lines
55 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.

# M2 - 基础用户系统 - 详细接口设计
## 1. 概述
本文档基于M2阶段的数据库设计和产品需求提供完整的RESTful API接口设计方案。所有接口遵循以下原则
- **RESTful规范**使用标准HTTP方法和状态码
- **统一响应格式**所有接口返回统一的JSON格式
- **安全性**JWT认证、权限控制、数据验证
- **高性能**:合理的缓存策略、分页设计
- **版本控制**API版本化管理
### 基础URL
```
https://api.starzh.com/v1
```
### 统一响应格式
```json
{
"code": 0, // 业务状态码0表示成功
"message": "success", // 提示信息
"data": {}, // 响应数据
}
```
### 统一错误码规范
- 0: 成功
- 400xx: 客户端错误(参数错误、验证失败等)
- 401xx: 认证错误
- 403xx: 权限错误
- 404xx: 资源不存在
- 409xx: 资源冲突
- 500xx: 服务器错误
---
## 2. 认证模块 (Authentication)
### 2.1 用户注册
#### 需求描述
允许新用户通过邮箱注册账号,需要邮箱验证激活。支持基本的用户名、密码规则校验。
#### 接口名称
用户注册接口
#### 设计原因
- 提供用户自主注册功能
- 通过邮箱验证确保用户真实性
- 防止恶意注册和垃圾账号
#### 请求类型
POST
#### 接口路径
`/auth/register`
#### 接口参数
```typescript
{
username: string; // 用户名3-50字符字母开头仅包含字母数字下划线
email: string; // 邮箱地址,需符合邮箱格式
password: string; // 密码8-100字符必须包含大小写字母和数字
confirmPassword: string; // 确认密码需与password一致
captcha: string; // 图形验证码
captchaId: string; // 验证码ID
}
```
**参数约束原因**
- username: 限制长度和字符类型,防止特殊字符引起的安全问题
- password: 强密码策略,提高账户安全性
- captcha: 防止机器人批量注册
#### 响应分类
- 成功201 Created - 注册成功,发送激活邮件
- 失败:
- 400 Bad Request - 参数验证失败
- 409 Conflict - 用户名或邮箱已存在
#### 响应格式
```json
// 成功响应
{
"code": 0,
"message": "注册成功,请查收邮件激活账号",
"data": {
"userId": 1234567890,
"username": "john_doe",
"email": "john@example.com",
"status": "inactive"
}
}
// 失败响应示例
{
"code": 40901,
"message": "用户名已被占用",
"data": null
}
```
#### 开发思路
1. 参数验证层使用Elysia的t验证器进行参数校验
2. 业务逻辑层:
- 验证图形验证码
- 检查用户名和邮箱唯一性
- 密码使用bcrypt加密成本因子12
- 生成用户记录状态为inactive
- 生成激活token并存入Redis24小时过期
- 发送激活邮件(异步队列)
3. 数据访问层:使用事务确保数据一致性
4. 日志记录记录注册操作到sys_operation_logs
---
### 2.2 用户登录
#### 需求描述
支持用户名或邮箱登录,实现登录失败次数限制,防止暴力破解。
#### 接口名称
用户登录接口
#### 设计原因
- 提供安全的身份认证机制
- 支持多种登录方式提升用户体验
- 防止暴力破解攻击
#### 请求类型
POST
#### 接口路径
`/auth/login`
#### 接口参数
```typescript
{
account: string; // 用户名或邮箱
password: string; // 密码
captcha?: string; // 验证码连续失败3次后必填
captchaId?: string; // 验证码ID
rememberMe?: boolean; // 记住我默认false
}
```
#### 响应分类
- 成功200 OK - 登录成功返回token
- 失败:
- 401 Unauthorized - 用户名或密码错误
- 423 Locked - 账号被锁定
#### 响应格式
```json
// 成功响应
{
"code": 0,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "xxxx-xxxx-xxxx",
"expiresIn": 7200,
"user": {
"id": 1234567890,
"username": "john_doe",
"nickname": "John",
"avatar": "https://...",
"roles": ["user"]
}
}
}
```
#### 开发思路
1. 查询用户支持username或email
2. 检查账号状态和锁定状态
3. 验证密码
4. 处理登录失败:
- 增加失败次数
- 超过5次锁定30分钟
- 3次失败后要求验证码
5. 登录成功:
- 清除失败次数
- 生成JWT token
- 更新最后登录信息
- 记录登录日志
---
### 2.3 刷新Token
#### 需求描述
使用refreshToken换取新的accessToken实现无感续期。
#### 接口名称
Token刷新接口
#### 设计原因
- 短期accessToken + 长期refreshToken模式
- 提高安全性减少token泄露风险
- 实现用户无感续期体验
#### 请求类型
POST
#### 接口路径
`/auth/refresh`
#### 接口参数
```typescript
{
refreshToken: string; // 刷新令牌
}
```
#### 响应格式
```json
{
"code": 0,
"message": "刷新成功",
"data": {
"token": "new-access-token",
"expiresIn": 7200
}
}
```
#### 开发思路
1. 验证refreshToken有效性
2. 检查用户状态
3. 生成新的accessToken
4. 可选轮转refreshToken
5. 记录刷新日志
---
### 2.4 账号激活
#### 需求描述
用户通过邮件中的链接或验证码激活账号。
#### 接口名称
账号激活接口
#### 设计原因
- 验证邮箱真实性
- 防止垃圾注册
- 提高用户质量
#### 请求类型
POST
#### 接口路径
`/auth/activate`
#### 接口参数
```typescript
{
token: string; // 激活令牌(从邮件链接获取)
// 或
email: string; // 邮箱
code: string; // 6位数字激活码
}
```
#### 响应格式
```json
{
"code": 0,
"message": "账号激活成功",
"data": {
"userId": 1234567890,
"username": "john_doe",
"status": "active"
}
}
```
#### 开发思路
1. 验证激活token或激活码
2. 检查是否过期
3. 更新用户状态为active
4. 删除Redis中的激活信息
5. 发送欢迎邮件
6. 记录激活日志
---
### 2.5 退出登录
#### 需求描述
用户主动退出登录清除token。
#### 接口名称
退出登录接口
#### 设计原因
- 用户主动结束会话
- 清除服务端缓存
- 增强安全性
#### 请求类型
POST
#### 接口路径
`/auth/logout`
#### 请求头
```
Authorization: Bearer <token>
```
#### 响应格式
```json
{
"code": 0,
"message": "退出成功",
"data": null
}
```
#### 开发思路
1. 获取当前token
2. 加入token黑名单Redis
3. 清除用户相关缓存
4. 记录退出日志
---
## 3. 用户管理模块 (User Management)
### 3.1 获取当前用户信息
#### 需求描述
获取当前登录用户的详细信息,包括基本信息、角色、权限、组织等。
#### 接口名称
获取当前用户信息接口
#### 设计原因
- 前端需要用户信息进行界面渲染
- 权限控制需要用户角色和权限信息
- 统一的用户信息获取入口
#### 请求类型
GET
#### 接口路径
`/users/me`
#### 请求头
```
Authorization: Bearer <token>
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890,
"username": "john_doe",
"email": "john@example.com",
"mobile": "13800138000",
"nickname": "John",
"avatar": "https://...",
"gender": 1,
"birthday": "1990-01-01",
"bio": "Hello world",
"status": "active",
"lastLoginAt": "2024-01-01T12:00:00Z",
"roles": [
{
"id": 1,
"code": "admin",
"name": "管理员"
}
],
"permissions": [
{
"code": "user:read",
"name": "查看用户",
"type": "api"
}
],
"organizations": [
{
"id": 1,
"name": "技术部",
"isPrimary": true,
"position": "工程师"
}
],
"tags": [
{
"id": 1,
"name": "VIP",
"color": "#ff4d4f"
}
]
}
}
```
#### 开发思路
1. 从JWT token中获取用户ID
2. 查询用户基本信息
3. 并行查询关联信息:
- 用户角色(包含权限快照)
- 用户组织
- 用户标签
4. 整合权限信息(角色权限去重)
5. 使用Redis缓存5分钟过期
---
### 3.2 用户列表查询
#### 需求描述
分页查询用户列表,支持多条件筛选和排序。
#### 接口名称
用户列表查询接口
#### 设计原因
- 管理员需要查看和管理所有用户
- 支持灵活的查询条件满足不同场景
- 分页设计避免大数据量查询
#### 请求类型
GET
#### 接口路径
`/users`
#### 接口参数
```typescript
// Query Parameters
{
page?: number; // 页码默认1
pageSize?: number; // 每页数量默认20最大100
keyword?: string; // 搜索关键词(用户名/邮箱/手机号/昵称)
status?: string; // 用户状态
roleId?: number; // 角色ID
organizationId?: number; // 组织ID
tagId?: number; // 标签ID
startDate?: string; // 注册开始时间
endDate?: string; // 注册结束时间
sortBy?: string; // 排序字段createdAt,lastLoginAt
sortOrder?: string; // 排序方向asc,desc
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": {
"items": [
{
"id": 1234567890,
"username": "john_doe",
"email": "john@example.com",
"mobile": "138****8000",
"nickname": "John",
"avatar": "https://...",
"status": "active",
"roles": ["admin", "user"],
"organizations": ["技术部"],
"tags": ["VIP"],
"loginCount": 100,
"lastLoginAt": "2024-01-01T12:00:00Z",
"createdAt": "2023-01-01T00:00:00Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 100,
"totalPages": 5
}
}
}
```
#### 开发思路
1. 参数验证和权限检查需要user:read权限
2. 构建查询条件:
- 关键词模糊查询
- 状态精确匹配
- 关联表过滤(角色、组织、标签)
- 时间范围查询
3. 执行分页查询(使用索引优化)
4. 批量查询关联信息减少N+1查询
5. 数据脱敏手机号中间4位
---
### 3.3 创建用户
#### 需求描述
管理员创建新用户,可直接设置角色、组织等信息。
#### 接口名称
创建用户接口
#### 设计原因
- 管理员需要批量创建用户
- 可预设用户角色和组织
- 支持直接激活状态
#### 请求类型
POST
#### 接口路径
`/users`
#### 接口参数
```typescript
{
username: string;
email: string;
password: string;
mobile?: string;
nickname?: string;
status?: string; // 默认active
gender?: number;
birthday?: string;
bio?: string;
roleIds?: number[]; // 角色ID数组
organizationIds?: Array<{
id: number;
isPrimary: boolean;
position?: string;
}>; // 组织信息
tagIds?: number[]; // 标签ID数组
sendNotification?: boolean; // 是否发送通知邮件
}
```
#### 响应格式
```json
{
"code": 0,
"message": "创建成功",
"data": {
"id": 1234567890,
"username": "new_user",
"email": "new@example.com",
"status": "active"
}
}
```
#### 开发思路
1. 权限检查需要user:create权限
2. 参数验证(唯一性检查)
3. 使用事务处理:
- 创建用户记录
- 分配角色
- 分配组织
- 分配标签
4. 发送通知邮件(可选)
5. 记录操作日志
---
### 3.4 更新用户信息
#### 需求描述
更新用户基本信息和关联信息。
#### 接口名称
更新用户信息接口
#### 设计原因
- 支持用户自主修改个人信息
- 管理员可修改用户所有信息
- 分离基本信息和关联信息更新
#### 请求类型
PUT
#### 接口路径
`/users/{userId}`
#### 接口参数
```typescript
{
email?: string;
mobile?: string;
nickname?: string;
avatar?: string;
gender?: number;
birthday?: string;
bio?: string;
// 以下字段需要管理员权限
status?: string;
roleIds?: number[];
organizationIds?: Array<{
id: number;
isPrimary: boolean;
position?: string;
}>;
tagIds?: number[];
}
```
#### 响应格式
```json
{
"code": 0,
"message": "更新成功",
"data": {
"id": 1234567890,
"username": "john_doe",
"email": "john@example.com",
"updatedAt": "2024-01-01T12:00:00Z"
}
}
```
#### 开发思路
1. 权限检查:
- 用户可修改自己的基本信息
- 管理员可修改所有信息
- root用户信息限制修改
2. 参数验证(邮箱唯一性等)
3. 使用乐观锁防止并发冲突
4. 更新关联信息时先删后增
5. 清除相关缓存
---
### 3.5 修改密码
#### 需求描述
用户修改自己的密码,需要验证原密码。
#### 接口名称
修改密码接口
#### 设计原因
- 用户自主管理密码
- 增强账户安全性
- 防止未授权修改
#### 请求类型
PUT
#### 接口路径
`/users/me/password`
#### 接口参数
```typescript
{
oldPassword: string; // 原密码
newPassword: string; // 新密码
confirmPassword: string; // 确认新密码
}
```
#### 响应格式
```json
{
"code": 0,
"message": "密码修改成功",
"data": null
}
```
#### 开发思路
1. 验证原密码正确性
2. 验证新密码符合规则
3. 更新密码bcrypt加密
4. 清除所有该用户的token
5. 发送密码修改通知邮件
---
### 3.6 重置密码
#### 需求描述
用户忘记密码时通过邮箱重置。
#### 接口名称
申请重置密码接口
#### 设计原因
- 用户忘记密码的补救措施
- 通过邮箱验证身份
- 防止恶意重置
#### 请求类型
POST
#### 接口路径
`/users/password/reset-request`
#### 接口参数
```typescript
{
email: string;
captcha: string;
captchaId: string;
}
```
#### 响应格式
```json
{
"code": 0,
"message": "重置邮件已发送",
"data": null
}
```
#### 开发思路
1. 验证邮箱存在
2. 验证图形验证码
3. 生成重置token6位数字或链接
4. 存入Redis30分钟过期
5. 发送重置邮件
6. 限制发送频率1分钟内不可重复
---
### 3.7 确认重置密码
#### 需求描述
使用重置token设置新密码。
#### 接口名称
确认重置密码接口
#### 请求类型
POST
#### 接口路径
`/users/password/reset-confirm`
#### 接口参数
```typescript
{
token: string; // 重置token
email: string; // 邮箱
newPassword: string; // 新密码
confirmPassword: string; // 确认密码
}
```
#### 响应格式
```json
{
"code": 0,
"message": "密码重置成功",
"data": null
}
```
#### 开发思路
1. 验证token有效性和匹配性
2. 验证新密码规则
3. 更新用户密码
4. 删除重置token
5. 清除用户所有token
6. 发送重置成功通知
---
### 3.8 删除用户
#### 需求描述
软删除用户,保留数据用于审计。
#### 接口名称
删除用户接口
#### 设计原因
- 满足用户注销需求
- 保留数据用于审计
- 支持误删恢复
#### 请求类型
DELETE
#### 接口路径
`/users/{userId}`
#### 响应格式
```json
{
"code": 0,
"message": "删除成功",
"data": null
}
```
#### 开发思路
1. 权限检查需要user:delete权限
2. 检查是否为root用户禁止删除
3. 检查是否为自己(需要二次确认)
4. 更新deleted_at字段
5. 清除用户所有会话
6. 记录删除操作日志
---
### 3.9 批量操作用户
#### 需求描述
批量启用、禁用、删除用户。
#### 接口名称
批量操作用户接口
#### 设计原因
- 提高管理效率
- 支持批量处理
- 减少重复操作
#### 请求类型
POST
#### 接口路径
`/users/batch`
#### 接口参数
```typescript
{
userIds: number[]; // 用户ID数组
action: string; // 操作类型enable,disable,delete
}
```
#### 响应格式
```json
{
"code": 0,
"message": "操作成功",
"data": {
"success": 10,
"failed": 0,
"errors": []
}
}
```
#### 开发思路
1. 权限检查
2. 过滤掉root用户
3. 批量执行操作
4. 记录操作结果
5. 返回执行统计
---
## 4. 角色管理模块 (Role Management)
### 4.1 角色树查询
#### 需求描述
查询角色树形结构,支持权限继承展示。
#### 接口名称
角色树查询接口
#### 设计原因
- 角色具有层级关系需要树形展示
- 支持权限继承机制
- 便于理解角色体系
#### 请求类型
GET
#### 接口路径
`/roles/tree`
#### 接口参数
```typescript
{
status?: string; // 过滤状态
withPermissions?: boolean; // 是否包含权限信息
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": [
{
"id": 1,
"code": "super_admin",
"name": "超级管理员",
"description": "拥有所有权限",
"status": "active",
"isSystem": true,
"permissionCount": 50,
"children": [
{
"id": 2,
"code": "admin",
"name": "管理员",
"pid": 1,
"children": []
}
]
}
]
}
```
#### 开发思路
1. 查询所有角色使用path字段优化
2. 构建树形结构(递归或迭代)
3. 统计每个角色的权限数量
4. 使用Redis缓存角色变更时失效
---
### 4.2 创建角色
#### 需求描述
创建新角色并分配权限,支持角色继承。
#### 接口名称
创建角色接口
#### 设计原因
- 灵活的角色管理支持业务扩展
- 权限继承减少重复配置
- 下级角色权限不能超过上级
#### 请求类型
POST
#### 接口路径
`/roles`
#### 接口参数
```typescript
{
code: string; // 角色代码,唯一
name: string; // 角色名称
description?: string; // 角色描述
pid?: number; // 父角色ID
status?: string; // 状态默认active
permissionIds: number[]; // 权限ID数组
}
```
#### 响应格式
```json
{
"code": 0,
"message": "创建成功",
"data": {
"id": 10,
"code": "editor",
"name": "编辑员",
"path": "/1/2/10/",
"level": 3
}
}
```
#### 开发思路
1. 权限检查需要role:create权限
2. 验证角色代码唯一性
3. 验证父角色存在性
4. 检查权限分配合法性:
- 获取父角色所有权限
- 确保新角色权限是父角色权限的子集
5. 使用事务创建:
- 创建角色记录
- 计算并设置path和level
- 分配权限
- 生成权限快照
6. 清除角色缓存
---
### 4.3 更新角色信息
#### 需求描述
更新角色基本信息,不包括权限。
#### 接口名称
更新角色信息接口
#### 设计原因
- 角色信息可能需要调整
- 分离基本信息和权限更新
- 防止误操作
#### 请求类型
PUT
#### 接口路径
`/roles/{roleId}`
#### 接口参数
```typescript
{
name?: string;
description?: string;
status?: string;
sortOrder?: number;
}
```
#### 开发思路
1. 权限检查需要role:update权限
2. 检查是否为系统角色(限制修改)
3. 更新角色信息
4. 清除角色缓存
---
### 4.4 更新角色权限
#### 需求描述
动态调整角色权限,支持批量操作。
#### 接口名称
更新角色权限接口
#### 设计原因
- 业务变化需要调整权限
- 支持灵活的权限管理
- 保证权限继承一致性
#### 请求类型
PUT
#### 接口路径
`/roles/{roleId}/permissions`
#### 接口参数
```typescript
{
permissionIds: number[]; // 新的权限ID数组全量
}
```
#### 响应格式
```json
{
"code": 0,
"message": "权限更新成功",
"data": {
"roleId": 10,
"permissionCount": 20,
"addedCount": 5,
"removedCount": 3
}
}
```
#### 开发思路
1. 检查角色是否为系统角色
2. 验证权限合法性(不超过父角色)
3. 对比新旧权限,计算差异
4. 使用事务更新:
- 删除旧权限关联
- 创建新权限关联
- 更新权限快照
5. 级联更新子角色(移除超出的权限)
6. 清除相关用户的权限缓存
---
### 4.5 删除角色
#### 需求描述
删除角色,处理关联关系。
#### 接口名称
删除角色接口
#### 设计原因
- 清理无用角色
- 保持系统整洁
- 防止权限泄露
#### 请求类型
DELETE
#### 接口路径
`/roles/{roleId}`
#### 开发思路
1. 权限检查需要role:delete权限
2. 检查是否为系统角色(禁止删除)
3. 检查是否有用户使用该角色
4. 检查是否有子角色
5. 软删除角色
6. 清除相关缓存
---
### 4.6 角色用户查询
#### 需求描述
查询某个角色下的所有用户。
#### 接口名称
角色用户查询接口
#### 设计原因
- 了解角色使用情况
- 便于角色管理
- 支持用户迁移
#### 请求类型
GET
#### 接口路径
`/roles/{roleId}/users`
#### 接口参数
```typescript
{
page?: number;
pageSize?: number;
keyword?: string;
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": {
"items": [
{
"id": 123,
"username": "john_doe",
"email": "john@example.com",
"assignedAt": "2024-01-01T00:00:00Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 50
}
}
}
```
---
### 4.7 角色排序接口
#### 需求描述
支持手动调整角色的显示顺序,保证同级角色按指定顺序展示。
#### 接口名称
角色排序接口
#### 设计原因
- 角色列表需要按重要性排序
- 下拉选择时按业务优先级展示
- 管理员需要控制显示顺序
#### 请求类型
PUT
#### 接口路径
`/roles/sort`
#### 接口参数
```typescript
{
items: Array<{
id: number; // 角色ID
sortOrder: number; // 新的排序号
}>
}
```
#### 响应格式
```json
{
"code": 0,
"message": "排序更新成功",
"data": {
"updated": 5
}
}
```
#### 开发思路
1. 权限检查需要role:sort权限
2. 批量更新sortOrder字段
3. 确保同级别角色排序唯一性
4. 清除角色缓存
5. 返回更新结果
---
### 4.8 拖拽排序接口
#### 需求描述
支持前端拖拽方式调整角色顺序,更直观的操作方式。
#### 接口名称
拖拽排序接口
#### 设计原因
- 提供更好的用户体验
- 直观的排序操作
- 减少误操作
#### 请求类型
PUT
#### 接口路径
`/roles/{roleId}/move`
#### 接口参数
```typescript
{
targetIndex: number; // 目标位置索引0开始
pid?: number; // 父级ID如果跨级移动
}
```
#### 响应格式
```json
{
"code": 0,
"message": "移动成功",
"data": {
"roleId": 10,
"oldIndex": 2,
"newIndex": 0,
"affectedRoles": [8, 9, 10]
}
}
```
#### 开发思路
1. 计算目标位置的sortOrder值
2. 更新被移动角色的sortOrder
3. 调整其他角色的sortOrder避免冲突
4. 如果跨级移动同时更新pid
5. 清除相关缓存
---
## 5. 权限管理模块 (Permission Management)
### 5.1 权限树查询
#### 需求描述
查询权限树形结构,按类型分组展示。
#### 接口名称
权限树查询接口
#### 设计原因
- 权限具有层级关系(菜单-页面-按钮)
- 便于权限分配时的选择
- 支持不同类型权限的管理
#### 请求类型
GET
#### 接口路径
`/permissions/tree`
#### 接口参数
```typescript
{
type?: string; // 权限类型menu,button,api,data
status?: string; // 状态过滤
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": [
{
"id": 1,
"code": "system",
"name": "系统管理",
"type": "menu",
"children": [
{
"id": 2,
"code": "system:user",
"name": "用户管理",
"type": "menu",
"children": [
{
"id": 3,
"code": "user:read",
"name": "查看用户",
"type": "api",
"resource": "user",
"action": "read"
}
]
}
]
}
]
}
```
#### 开发思路
1. 查询权限列表
2. 按类型分组
3. 构建树形结构
4. 使用Redis缓存
---
### 5.2 创建权限
#### 需求描述
创建新的权限节点。
#### 接口名称
创建权限接口
#### 设计原因
- 新功能需要新权限
- 灵活的权限扩展
- 支持细粒度控制
#### 请求类型
POST
#### 接口路径
`/permissions`
#### 接口参数
```typescript
{
code: string; // 权限代码
name: string; // 权限名称
type: string; // 权限类型
resource?: string; // 资源标识
action?: string; // 操作标识
pid?: number; // 父权限ID
description?: string; // 描述
meta?: object; // 元数据(如图标、路由)
}
```
#### 开发思路
1. 权限检查需要permission:create权限
2. 验证权限代码唯一性
3. 验证父权限存在性
4. 创建权限记录
5. 清除权限缓存
---
### 5.3 批量创建权限
#### 需求描述
支持批量导入权限配置。
#### 接口名称
批量创建权限接口
#### 设计原因
- 新模块上线需要批量添加权限
- 提高配置效率
- 支持权限模板导入
#### 请求类型
POST
#### 接口路径
`/permissions/batch`
#### 接口参数
```typescript
{
permissions: Array<{
code: string;
name: string;
type: string;
resource?: string;
action?: string;
pid?: number;
description?: string;
}>
}
```
#### 响应格式
```json
{
"code": 0,
"message": "批量创建成功",
"data": {
"success": 10,
"failed": 0,
"errors": []
}
}
```
#### 开发思路
1. 批量验证权限代码唯一性
2. 验证父权限存在性
3. 使用事务批量插入
4. 返回执行结果统计
5. 清除权限缓存
---
### 5.4 更新权限
#### 需求描述
更新权限信息。
#### 接口名称
更新权限接口
#### 设计原因
- 权限名称或描述可能需要调整
- 元数据更新(如菜单图标)
- 状态变更
#### 请求类型
PUT
#### 接口路径
`/permissions/{permissionId}`
#### 接口参数
```typescript
{
name?: string;
description?: string;
status?: string;
meta?: object;
sortOrder?: number;
}
```
#### 开发思路
1. 权限检查
2. 更新权限信息
3. 清除权限缓存
4. 通知相关角色缓存更新
---
### 5.5 删除权限
#### 需求描述
删除权限节点及其子权限。
#### 接口名称
删除权限接口
#### 设计原因
- 功能下线需要删除权限
- 保持权限体系整洁
- 防止权限泄露
#### 请求类型
DELETE
#### 接口路径
`/permissions/{permissionId}`
#### 开发思路
1. 权限检查需要permission:delete权限
2. 检查是否有角色使用该权限
3. 递归删除子权限
4. 清除相关缓存
---
### 5.6 权限检查接口
#### 需求描述
检查当前用户是否拥有特定权限。
#### 接口名称
权限检查接口
#### 设计原因
- 前端动态控制界面元素
- 细粒度的功能控制
- 实时权限验证
#### 请求类型
POST
#### 接口路径
`/permissions/check`
#### 接口参数
```typescript
{
permissions: string[]; // 权限代码数组
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": {
"user:read": true,
"user:create": true,
"user:delete": false
}
}
```
#### 开发思路
1. 获取当前用户所有权限
2. 批量检查请求的权限
3. 返回权限检查结果
---
### 5.7 权限排序接口
#### 需求描述
调整权限的显示顺序,特别是菜单权限的排序。
#### 接口名称
权限排序接口
#### 设计原因
- 菜单权限需要控制显示顺序
- 影响前端菜单渲染顺序
- 提升用户体验
#### 请求类型
PUT
#### 接口路径
`/permissions/sort`
#### 接口参数
```typescript
{
items: Array<{
id: number;
sortOrder: number;
}>
}
```
#### 开发思路
1. 权限检查需要permission:sort权限
2. 批量更新权限排序
3. 确保同级权限排序唯一
4. 清除权限缓存
5. 通知前端刷新菜单
---
## 6. 组织架构模块 (Organization Management)
### 6.1 组织树查询
#### 需求描述
查询组织架构树,支持人员统计。
#### 接口名称
组织架构树查询接口
#### 设计原因
- 直观展示组织层级关系
- 便于用户分配和管理
- 支持组织人员统计
#### 请求类型
GET
#### 接口路径
`/organizations/tree`
#### 接口参数
```typescript
{
type?: string; // 组织类型
status?: string; // 状态
withStats?: boolean; // 是否包含统计信息
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": [
{
"id": 1,
"code": "ROOT",
"name": "星撰集团",
"type": "company",
"userCount": 100,
"children": [
{
"id": 2,
"code": "TECH",
"name": "技术部",
"type": "department",
"userCount": 30,
"leader": {
"id": 123,
"name": "张三"
},
"children": []
}
]
}
]
}
```
#### 开发思路
1. 查询组织列表
2. 构建树形结构
3. 如需统计:
- 批量查询用户组织关联
- 聚合统计各组织人数
4. 查询负责人信息
5. 使用Redis缓存
---
### 6.2 创建组织
#### 需求描述
创建新的组织节点。
#### 接口名称
创建组织接口
#### 设计原因
- 组织架构需要动态调整
- 支持业务扩展
- 灵活的组织管理
#### 请求类型
POST
#### 接口路径
`/organizations`
#### 接口参数
```typescript
{
code: string; // 组织代码
name: string; // 组织名称
fullName?: string; // 组织全称
type: string; // 组织类型
pid?: number; // 父组织ID
leaderId?: number; // 负责人ID
address?: string; // 地址
phone?: string; // 电话
description?: string; // 描述
}
```
#### 开发思路
1. 权限检查需要organization:create权限
2. 验证组织代码唯一性
3. 验证父组织存在性
4. 创建组织记录
5. 计算path和level
6. 清除组织缓存
---
### 6.3 调整组织架构
#### 需求描述
支持拖拽调整组织层级关系。
#### 接口名称
调整组织架构接口
#### 设计原因
- 组织架构会随业务发展调整
- 支持灵活的组织变更
- 保持数据完整性
#### 请求类型
PUT
#### 接口路径
`/organizations/{organizationId}/move`
#### 接口参数
```typescript
{
targetPid: number; // 目标父组织ID
targetIndex?: number; // 目标位置索引
}
```
#### 响应格式
```json
{
"code": 0,
"message": "调整成功",
"data": {
"id": 10,
"oldPath": "/1/2/10/",
"newPath": "/1/3/10/",
"affectedCount": 5
}
}
```
#### 开发思路
1. 验证目标组织存在性
2. 检查是否会形成循环
3. 使用事务更新:
- 更新pid
- 重新计算path和level
- 更新所有子组织的path
- 调整排序
4. 记录组织变更日志
5. 清除相关缓存
---
### 6.4 组织人员管理
#### 需求描述
管理组织内的人员分配。
#### 接口名称
组织人员分配接口
#### 设计原因
- 灵活的人员调动
- 支持批量操作
- 记录调动历史
#### 请求类型
POST
#### 接口路径
`/organizations/{organizationId}/users`
#### 接口参数
```typescript
{
action: string; // 操作add,remove,move
userIds: number[]; // 用户ID数组
position?: string; // 职位(添加时使用)
isPrimary?: boolean; // 是否主组织
targetOrgId?: number; // 目标组织ID移动时使用
}
```
#### 开发思路
1. 权限检查
2. 验证用户和组织存在性
3. 执行批量操作:
- add: 添加用户到组织
- remove: 从组织移除用户
- move: 移动到其他组织
4. 记录人员变动日志
---
### 6.5 删除组织
#### 需求描述
删除组织节点,处理人员安置。
#### 接口名称
删除组织接口
#### 设计原因
- 组织调整需要删除节点
- 确保人员妥善安置
- 保持数据完整性
#### 请求类型
DELETE
#### 接口路径
`/organizations/{organizationId}`
#### 接口参数
```typescript
{
handleUsers?: string; // 人员处理方式moveToParent,remove
targetOrgId?: number; // 目标组织ID自定义迁移时使用
}
```
#### 开发思路
1. 权限检查需要organization:delete权限
2. 检查是否有子组织
3. 处理组织内人员
4. 软删除组织
5. 清除相关缓存
---
### 6.6 组织架构排序接口
#### 需求描述
调整同级组织的显示顺序。
#### 接口名称
组织排序接口
#### 设计原因
- 组织架构显示需要符合实际层级
- 重要部门需要前置显示
- 便于组织管理
#### 请求类型
PUT
#### 接口路径
`/organizations/{pid}/sort`
#### 接口参数
```typescript
{
items: Array<{
id: number;
sortOrder: number;
}>
}
```
#### 响应格式
```json
{
"code": 0,
"message": "组织排序更新成功",
"data": {
"parentId": 1,
"updated": 3
}
}
```
#### 开发思路
1. 验证所有组织都属于同一父级
2. 批量更新sortOrder
3. 清除组织架构缓存
4. 返回更新结果
---
## 7. 字典管理模块 (Dictionary Management)
### 7.1 字典类型树查询
#### 需求描述
查询字典类型的树形结构,支持分类管理。
#### 接口名称
字典类型树查询接口
#### 设计原因
- 字典类型支持分类管理
- 便于字典的组织和查找
- 区分系统字典和业务字典
#### 请求类型
GET
#### 接口路径
`/dictionaries/types/tree`
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": [
{
"id": 1,
"code": "system",
"name": "系统字典",
"isSystem": true,
"children": [
{
"id": 10,
"code": "user_status",
"name": "用户状态",
"itemCount": 4
}
]
}
]
}
```
#### 开发思路
1. 查询所有字典类型
2. 构建树形结构
3. 统计每个类型的字典项数量
4. 使用Redis缓存
---
### 7.2 获取字典项
#### 需求描述
根据字典类型获取所有字典项,支持树形字典。
#### 接口名称
获取字典项接口
#### 设计原因
- 前端下拉框等组件需要字典数据
- 支持动态配置
- 减少硬编码
#### 请求类型
GET
#### 接口路径
`/dictionaries/items`
#### 接口参数
```typescript
{
typeCode: string; // 字典类型代码
tree?: boolean; // 是否返回树形结构
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": [
{
"key": "active",
"value": "active",
"label": "正常",
"labelEn": "Active",
"color": "#52c41a",
"sortOrder": 1,
"extra": {}
}
]
}
```
#### 开发思路
1. 根据typeCode查询字典类型
2. 查询该类型下的所有字典项
3. 如果是树形字典,构建树结构
4. 使用Redis缓存字典变更少
---
### 7.3 创建字典类型
#### 需求描述
创建新的字典类型。
#### 接口名称
创建字典类型接口
#### 设计原因
- 业务扩展需要新字典
- 灵活的配置管理
- 支持分类组织
#### 请求类型
POST
#### 接口路径
`/dictionaries/types`
#### 接口参数
```typescript
{
code: string; // 字典类型代码
name: string; // 字典类型名称
pid?: number; // 父类型ID
description?: string; // 描述
sortOrder?: number; // 排序号
}
```
#### 开发思路
1. 权限检查需要dictionary:create权限
2. 验证代码唯一性
3. 验证父权限存在性
4. 创建字典类型
5. 清除字典缓存
---
### 7.4 批量更新字典项
#### 需求描述
支持批量更新字典项,保持顺序。
#### 接口名称
批量更新字典项接口
#### 设计原因
- 字典项通常需要批量维护
- 保持显示顺序的一致性
- 提高维护效率
#### 请求类型
PUT
#### 接口路径
`/dictionaries/types/{typeId}/items/batch`
#### 接口参数
```typescript
{
items: Array<{
id?: number; // 有ID为更新无ID为新增
key: string;
value: string;
label: string;
labelEn?: string;
pid?: number;
sortOrder: number;
status?: string;
color?: string;
extra?: object;
}>
}
```
#### 响应格式
```json
{
"code": 0,
"message": "批量更新成功",
"data": {
"created": 3,
"updated": 5,
"deleted": 2
}
}
```
#### 开发思路
1. 验证字典类型存在
2. 检查是否为系统字典
3. 验证key在类型内唯一
4. 使用事务处理:
- 标记删除不在列表中的项
- 更新已存在的项
- 创建新项
5. 清除字典缓存
---
### 7.5 导出字典数据
#### 需求描述
导出字典配置用于备份或迁移。
#### 接口名称
导出字典数据接口
#### 设计原因
- 配置备份需求
- 环境间迁移
- 批量导入导出
#### 请求类型
GET
#### 接口路径
`/dictionaries/export`
#### 接口参数
```typescript
{
typeIds?: number[]; // 指定类型ID不传则导出全部
format?: string; // 导出格式json,excel
}
```
#### 响应格式
```
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="dictionaries_20240101.json"
```
#### 开发思路
1. 查询指定的字典类型和项
2. 构建导出数据结构
3. 根据格式生成文件
4. 返回文件流
---
### 7.6 字典项排序接口
#### 需求描述
调整字典项的显示顺序,影响下拉框等组件的选项顺序。
#### 接口名称
字典项排序接口
#### 设计原因
- 下拉框选项需要按业务逻辑排序
- 常用选项前置显示
- 提升用户操作效率
#### 请求类型
PUT
#### 接口路径
`/dictionaries/types/{typeId}/items/sort`
#### 接口参数
```typescript
{
items: Array<{
id: number;
sortOrder: number;
}>
}
```
#### 响应格式
```json
{
"code": 0,
"message": "字典项排序更新成功",
"data": {
"typeId": 1,
"updated": 4
}
}
```
#### 开发思路
1. 验证所有字典项都属于指定类型
2. 批量更新sortOrder
3. 清除字典缓存
4. 返回更新结果
---
## 8. 标签管理模块 (Tag Management)
### 8.1 标签列表查询
#### 需求描述
查询标签列表,支持按类型和使用频率排序。
#### 接口名称
标签列表查询接口
#### 设计原因
- 便于标签的统一管理
- 支持热门标签展示
- 不同类型标签分开管理
#### 请求类型
GET
#### 接口路径
`/tags`
#### 接口参数
```typescript
{
type?: string; // 标签类型
keyword?: string; // 搜索关键词
sortBy?: string; // 排序usageCount,createdAt
page?: number;
pageSize?: number;
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": {
"items": [
{
"id": 1,
"name": "VIP",
"type": "user",
"color": "#ff4d4f",
"usageCount": 100,
"description": "VIP用户"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 50
}
}
}
```
#### 开发思路
1. 构建查询条件
2. 执行分页查询
3. 根据sortBy排序
4. 返回标签列表
---
### 8.2 创建标签
#### 需求描述
创建新的标签。
#### 接口名称
创建标签接口
#### 设计原因
- 灵活的标签扩展
- 支持自定义标签
- 统一标签管理
#### 请求类型
POST
#### 接口路径
`/tags`
#### 接口参数
```typescript
{
name: string; // 标签名称
type: string; // 标签类型
color?: string; // 标签颜色
description?: string; // 描述
}
```
#### 开发思路
1. 权限检查需要tag:create权限
2. 验证标签名称唯一性(同类型内)
3. 创建标签记录
4. 返回创建结果
---
### 8.3 标签使用统计
#### 需求描述
统计标签使用情况,生成报表。
#### 接口名称
标签使用统计接口
#### 设计原因
- 了解标签使用情况
- 优化标签体系
- 数据分析支持
#### 请求类型
GET
#### 接口路径
`/tags/statistics`
#### 接口参数
```typescript
{
type?: string; // 标签类型
top?: number; // 返回前N个
startDate?: string; // 统计开始时间
endDate?: string; // 统计结束时间
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": {
"summary": {
"totalTags": 50,
"totalUsage": 1000,
"avgUsage": 20
},
"topTags": [
{
"id": 1,
"name": "VIP",
"usageCount": 100,
"percentage": 10
}
],
"trend": [
{
"date": "2024-01-01",
"count": 20
}
]
}
}
```
#### 开发思路
1. 统计基础数据
2. 查询热门标签
3. 计算使用趋势
4. 整合返回结果
---
### 8.4 标签智能推荐
#### 需求描述
根据用户特征智能推荐标签。
#### 接口名称
标签推荐接口
#### 设计原因
- 提高标签使用的准确性
- 基于规则引擎自动打标
- 减少人工维护成本
#### 请求类型
POST
#### 接口路径
`/tags/recommend`
#### 接口参数
```typescript
{
userId: number; // 用户ID
type: string; // 推荐类型
limit?: number; // 推荐数量限制
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": {
"recommendations": [
{
"tagId": 1,
"tagName": "活跃用户",
"confidence": 0.95,
"reason": "最近30天登录20次"
}
]
}
}
```
#### 开发思路
1. 获取用户特征数据
2. 执行推荐规则:
- 活跃度规则(登录次数、最后登录时间)
- 贡献度规则(内容创作数量)
- 消费规则VIP等级
3. 计算置信度
4. 返回推荐标签列表
5. 记录推荐日志
---
### 8.5 批量打标签
#### 需求描述
为多个用户批量添加或移除标签。
#### 接口名称
批量打标签接口
#### 设计原因
- 提高运营效率
- 支持批量操作
- 灵活的标签管理
#### 请求类型
POST
#### 接口路径
`/tags/batch-assign`
#### 接口参数
```typescript
{
userIds: number[]; // 用户ID数组
tagIds: number[]; // 标签ID数组
action: string; // 操作add,remove
}
```
#### 响应格式
```json
{
"code": 0,
"message": "批量操作成功",
"data": {
"success": 50,
"failed": 0,
"errors": []
}
}
```
#### 开发思路
1. 权限检查
2. 验证用户和标签存在性
3. 批量执行操作
4. 更新标签使用统计
5. 返回执行结果
---
### 8.6 标签排序接口
#### 需求描述
调整标签的显示顺序,支持热门标签前置。
#### 接口名称
标签排序接口
#### 设计原因
- 热门标签需要前置显示
- 按业务重要性排序
- 提升标签选择效率
#### 请求类型
PUT
#### 接口路径
`/tags/sort`
#### 接口参数
```typescript
{
type?: string; // 标签类型,为空则排序全部
items: Array<{
id: number;
sortOrder: number;
}>
}
```
#### 响应格式
```json
{
"code": 0,
"message": "标签排序更新成功",
"data": {
"type": "user",
"updated": 6
}
}
```
#### 开发思路
1. 权限检查需要tag:sort权限
2. 验证标签类型一致性
3. 批量更新sortOrder
4. 更新标签缓存
5. 返回更新结果
---
## 9. 通用功能接口
### 9.1 图形验证码
#### 需求描述
生成图形验证码,用于注册、登录等场景。
#### 接口名称
获取图形验证码接口
#### 设计原因
- 防止机器人攻击
- 增强系统安全性
- 限制恶意请求
#### 请求类型
GET
#### 接口路径
`/common/captcha`
#### 接口参数
```typescript
{
type?: string; // 验证码类型image,math
width?: number; // 图片宽度默认120
height?: number; // 图片高度默认40
}
```
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": {
"captchaId": "xxxx-xxxx-xxxx",
"captchaImage": "data:image/svg+xml;base64,..."
}
}
```
#### 开发思路
1. 生成随机验证码文本
2. 生成SVG或图片
3. 存储到Redis5分钟过期
4. 返回Base64编码的图片
---
### 9.2 文件上传
#### 需求描述
通用文件上传接口,支持头像等文件上传。
#### 接口名称
文件上传接口
#### 设计原因
- 统一的文件上传入口
- 支持多种文件类型
- 安全的文件处理
#### 请求类型
POST
#### 接口路径
`/common/upload`
#### 请求格式
multipart/form-data
#### 接口参数
```typescript
{
file: File; // 文件
type: string; // 文件类型avatar,document,image
isPublic?: boolean; // 是否公开访问默认false
}
```
#### 响应格式
```json
{
"code": 0,
"message": "上传成功",
"data": {
"fileId": "file123456",
"url": "https://oss.starzh.com/xxx.jpg",
"size": 102400,
"name": "avatar.jpg",
"type": "image/jpeg"
}
}
```
#### 开发思路
1. 验证文件类型和大小
2. 生成唯一文件名
3. 上传到OSS或本地存储
4. 记录文件信息到数据库
5. 返回文件访问URL
---
### 9.3 邮件发送
#### 需求描述
统一的邮件发送接口,用于系统通知。
#### 接口名称
邮件发送接口(内部接口)
#### 设计原因
- 统一邮件发送逻辑
- 支持模板化
- 便于监控和管理
#### 请求类型
POST
#### 接口路径
`/internal/email/send`
#### 接口参数
```typescript
{
to: string[]; // 收件人邮箱数组
template: string; // 邮件模板ID
params: object; // 模板参数
attachments?: Array<{ // 附件
filename: string;
content: string;
}>;
}
```
#### 开发思路
1. 加载邮件模板
2. 渲染模板内容
3. 调用邮件服务发送
4. 记录发送日志
5. 处理发送失败(重试机制)
---
### 9.4 系统健康检查
#### 需求描述
提供系统健康状态检查接口。
#### 接口名称
健康检查接口
#### 设计原因
- 监控系统状态
- 负载均衡健康检查
- 快速发现问题
#### 请求类型
GET
#### 接口路径
`/health`
#### 响应格式
```json
{
"code": 0,
"message": "success",
"data": {
"status": "healthy",
"version": "1.0.0",
"uptime": 3600,
"services": {
"database": "ok",
"redis": "ok",
"elasticsearch": "ok"
}
}
}
```
#### 开发思路
1. 检查数据库连接
2. 检查Redis连接
3. 检查其他服务状态
4. 返回综合健康状态
---
### 9.5 数据导入导出
#### 需求描述
支持批量数据的导入导出功能。
#### 接口名称
数据导出接口
#### 设计原因
- 数据备份需求
- 批量数据处理
- 数据迁移支持
#### 请求类型
POST
#### 接口路径
`/common/export`
#### 接口参数
```typescript
{
module: string; // 模块users,roles,organizations
format: string; // 格式excel,csv,json
filters?: object; // 过滤条件
fields?: string[]; // 导出字段
}
```
#### 响应格式
```json
{
"code": 0,
"message": "导出任务已创建",
"data": {
"taskId": "export-123456",
"status": "processing"
}
}
```
#### 开发思路
1. 创建导出任务
2. 异步处理数据查询和转换
3. 生成导出文件
4. 通过WebSocket或轮询通知完成
5. 提供下载链接
---
### 9.6 通用排序接口
#### 需求描述
提供通用的排序接口,支持多种数据类型的排序。
#### 接口名称
通用排序接口
#### 设计原因
- 统一的排序逻辑
- 减少代码重复
- 便于维护和扩展
#### 请求类型
PUT
#### 接口路径
`/common/sort`
#### 接口参数
```typescript
{
table: string; // 表名roles,permissions,organizations,tags
scopeField?: string; // 范围字段pid,typeId等
scopeValue?: any; // 范围值
items: Array<{
id: number;
sortOrder: number;
}>
}
```
#### 响应格式
```json
{
"code": 0,
"message": "排序更新成功",
"data": {
"table": "roles",
"scope": "pid=1",
"updated": 5
}
}
```
#### 开发思路
1. 验证表名和字段的安全性
2. 权限检查(根据表名动态判断)
3. 构建更新SQL
4. 批量更新排序字段
5. 清除相关缓存
6. 返回更新结果
---
## 10. 安全性设计
### 10.1 认证机制
- **JWT Token认证**
- AccessToken有效期2小时
- RefreshToken有效期7天
- Token黑名单机制
- 支持多设备登录管理
### 10.2 权限控制
- **基于RBAC的权限模型**
- 接口级别的权限控制
- 数据级别的权限过滤
- 动态权限加载
- 权限缓存优化
### 10.3 安全措施
- **传输安全**
- 所有接口强制HTTPS
- 敏感数据加密传输
- 防重放攻击(时间戳+nonce
- **输入验证**
- 参数类型和格式验证
- SQL注入防护参数化查询
- XSS防护输入过滤和转义
- 文件上传安全检查
- **访问控制**
- IP白名单管理接口
- 请求频率限制
- 并发连接限制
- 异常行为检测
### 10.4 日志审计
- **操作日志**
- 记录所有写操作
- 包含用户、时间、IP、操作内容
- 敏感操作实时告警
- **安全日志**
- 登录失败记录
- 权限拒绝记录
- 异常请求记录
---
## 11. 性能优化
### 11.1 缓存策略
| 缓存类型 | 缓存内容 | 过期时间 | 更新策略 |
|---------|---------|---------|---------|
| 用户信息缓存 | 基本信息、角色、权限 | 5分钟 | 主动更新+过期刷新 |
| 角色权限缓存 | 角色树、权限快照 | 1小时 | 变更时删除 |
| 字典缓存 | 字典类型和项 | 24小时 | 变更时删除 |
| 验证码缓存 | 图形验证码 | 5分钟 | 使用后删除 |
### 11.2 查询优化
- **索引优化**
- 基于查询模式设计索引
- 定期分析慢查询日志
- 避免全表扫描
- **查询优化**
- 使用预编译语句
- 避免N+1查询
- 合理使用JOIN和子查询
- 大数据量分页优化
### 11.3 并发控制
- **限流策略**
- 接口级别限流(令牌桶算法)
- 用户级别限流
- IP级别限流
- **资源控制**
- 数据库连接池管理
- Redis连接池管理
- 异步任务队列
### 11.4 异步处理
- **异步任务**
- 邮件发送
- 文件处理
- 数据导入导出
- 统计计算
---
## 12. 错误处理
### 12.1 错误码规范
| 错误码范围 | 说明 | 示例 |
|-----------|------|------|
| 0 | 成功 | 操作成功 |
| 400xx | 客户端错误 | 40001-参数错误 |
| 401xx | 认证错误 | 40101-未登录 |
| 403xx | 权限错误 | 40301-无权限 |
| 404xx | 资源不存在 | 40401-用户不存在 |
| 409xx | 资源冲突 | 40901-用户名已存在 |
| 423xx | 资源锁定 | 42301-账号被锁定 |
| 429xx | 请求过多 | 42901-请求频率超限 |
| 500xx | 服务器错误 | 50001-内部错误 |
| 503xx | 服务不可用 | 50301-服务维护中 |
### 12.2 错误响应格式
```json
{
"code": 40001,
"message": "参数验证失败用户名长度必须在3-50个字符之间",
"data": {
"field": "username",
"value": "ab",
"rule": "minLength"
},
}
```
### 12.3 错误处理最佳实践
- **友好的错误提示**
- 使用用户能理解的语言
- 提供解决建议
- 避免暴露技术细节
- **错误日志记录**
- 记录完整的错误堆栈
- 包含请求上下文
- 分级记录info/warn/error
- **错误监控告警**
- 错误率监控
- 关键错误实时告警
- 错误趋势分析
---
## 13. 接口版本管理
### 13.1 版本策略
- **URL版本化**
- 格式:`/api/v{n}/...`
- 主版本号变更表示不兼容更新
- 向后兼容原则
### 13.2 版本迁移
- **废弃通知**
- 提前3个月通知
- 响应头添加废弃警告
- 提供迁移文档
- **版本共存**
- 新旧版本并行运行
- 逐步迁移用户
- 设置旧版本下线时间
---
## 14. 开发规范总结
### 14.1 接口设计原则
- **RESTful规范**
- 使用标准HTTP方法
- 资源导向的URL设计
- 合理使用状态码
- **一致性原则**
- 统一的命名规范
- 统一的响应格式
- 统一的错误处理
### 14.2 最佳实践
- **幂等性设计**
- GET/PUT/DELETE操作幂等
- POST操作防重复提交
- **分页设计**
- 统一分页参数
- 限制最大返回条数
- 提供总数统计
- **数据安全**
- 敏感数据脱敏
- 防止信息泄露
- 输入验证和过滤
### 14.3 文档规范
- **接口文档**
- 使用Swagger自动生成
- 包含请求和响应示例
- 说明业务场景
- **变更记录**
- 记录所有API变更
- 说明变更原因
- 提供升级指南
---
## 15. 附录
### 15.1 常用正则表达式
```javascript
// 用户名3-50位字母数字下划线字母开头
const USERNAME_REGEX = /^[a-zA-Z][a-zA-Z0-9_]{2,49}$/;
// 邮箱
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
// 手机号(中国大陆)
const MOBILE_REGEX = /^1[3-9]\d{9}$/;
// 强密码8-100位包含大小写字母和数字
const PASSWORD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,100}$/;
```
### 15.2 时间格式约定
- 统一使用ISO 8601格式
- 示例:`2024-01-01T12:00:00Z`
- 时区统一使用UTC时间
### 15.3 分页参数约定
- `page`: 页码从1开始
- `pageSize`: 每页条数默认20最大100
- `total`: 总记录数
- `totalPages`: 总页数
---
本接口设计文档为M2基础用户系统的完整API规范后续开发应严格遵循本文档的设计要求。