跳到主要内容

用户管理系统

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向用户管理系统,全面梳理用户增删改查、密码管理、状态控制、登录认证等核心能力,明确数据模型设计、权限控制机制、安全防护策略,并提供完整的RESTful API接口清单与最佳实践建议。系统采用前后端分离架构,管理后台通过统一的REST接口提供用户管理能力,同时支持多种登录方式与权限信息获取。

项目结构

用户管理模块位于 yudao-module-system 中,主要由以下层次构成:

  • 控制层:提供REST接口,如 UserController、AuthController、UserProfileController
  • 服务层:封装业务逻辑,如 AdminUserService 接口及其实现
  • 数据访问层:MyBatis-Plus实体类 AdminUserDO 及其Mapper
  • API层:对外RPC接口 AdminUserApi 及其实现 AdminUserApiImpl
  • VO层:请求/响应参数对象,如 UserSaveReqVO、UserRespVO、UserProfileUpdateReqVO 等
  • 文档:用户管理功能说明文档 user-management.md

Mermaid Diagram Code:

graph TB
subgraph "控制层"
UC["UserController<br/>用户控制器"]
AC["AuthController<br/>认证控制器"]
UPC["UserProfileController<br/>用户个人资料控制器"]
end
subgraph "服务层"
USI["AdminUserService<br/>用户服务接口"]
end
subgraph "数据层"
UDO["AdminUserDO<br/>用户数据对象"]
end
subgraph "API层"
UA["AdminUserApi<br/>用户RPC接口"]
UAI["AdminUserApiImpl<br/>用户RPC实现"]
end
UC --> USI
AC --> USI
UPC --> USI
USI --> UDO
UA --> USI
UAI --> USI

图表来源

章节来源

核心组件

  • 用户控制器 UserController:提供用户增删改查、分页查询、导入导出、重置密码、修改状态等接口
  • 认证控制器 AuthController:提供账号密码登录、登出、刷新令牌、获取权限信息、注册、短信登录、重置密码、社交登录等接口
  • 用户服务接口 AdminUserService:定义用户领域核心方法,包括创建/修改/删除、分页查询、导入、密码与状态管理、登录信息更新等
  • 用户数据对象 AdminUserDO:用户实体映射,包含基础字段、状态、登录信息、岗位集合等
  • 用户API接口与实现 AdminUserApi/AdminUserApiImpl:为其他模块提供RPC查询用户的能力
  • 用户个人资料控制器 UserProfileController:提供个人中心信息更新、密码修改、头像上传等接口
  • VO层:UserSaveReqVO、UserRespVO、UserProfileUpdateReqVO、UserProfileUpdatePasswordReqVO 等参数校验与传输对象

章节来源

架构总览

用户管理模块遵循经典的分层架构,控制层负责暴露REST接口,服务层承载业务逻辑,数据层负责持久化,API层提供跨模块RPC能力。认证与权限信息通过AuthController统一输出,用户个人资料通过UserProfileController与服务层交互。

Mermaid Diagram Code:

sequenceDiagram
participant Client as "客户端"
participant AuthCtrl as "AuthController"
participant UserCtrl as "UserController"
participant ProfileCtrl as "UserProfileController"
participant UserService as "AdminUserService"
participant UserDO as "AdminUserDO"
Client->>AuthCtrl : POST /system/auth/login
AuthCtrl->>UserService : login(reqVO)
UserService-->>AuthCtrl : 返回登录结果
AuthCtrl-->>Client : 返回令牌与用户信息
Client->>UserCtrl : POST /system/user/create
UserCtrl->>UserService : createUser(reqVO)
UserService-->>UserCtrl : 返回用户ID
UserCtrl-->>Client : 返回成功
Client->>ProfileCtrl : PUT /system/user/profile/update
ProfileCtrl->>UserService : updateUserProfile(userId, reqVO)
UserService-->>ProfileCtrl : 更新完成
ProfileCtrl-->>Client : 返回成功

图表来源

详细组件分析

用户数据模型设计

  • 实体类 AdminUserDO:映射 system_users 表,包含用户ID、用户名、加密密码、昵称、备注、部门ID、岗位ID集合、邮箱、手机号、性别、头像、状态、最后登录IP与时间等字段
  • 字段约束与类型:用户名与昵称长度限制;手机号长度固定;性别使用 SexEnum 枚举;状态使用 CommonStatusEnum 枚举;岗位ID集合使用JacksonTypeHandler序列化存储
  • 关联关系:与部门存在多对一关系;岗位ID集合为一对多集合映射

Mermaid Diagram Code:

classDiagram
class AdminUserDO {
+Long id
+String username
+String password
+String nickname
+String remark
+Long deptId
+Set~Long~ postIds
+String email
+String mobile
+Integer sex
+String avatar
+Integer status
+String loginIp
+LocalDateTime loginDate
}
class SexEnum {
<<enumeration>>
+MALE
+FEMALE
+UNKNOWN
}
class CommonStatusEnum {
<<enumeration>>
+ENABLE
+DISABLE
}
AdminUserDO --> SexEnum : "使用"
AdminUserDO --> CommonStatusEnum : "使用"

图表来源

章节来源

用户增删改查与状态控制

  • 新增用户:POST /system/user/create,权限要求 system:user:create
  • 修改用户:PUT /system/user/update,权限要求 system:user:update
  • 删除用户:DELETE /system/user/delete?id=...,权限要求 system:user:delete
  • 重置密码:PUT /system/user/update-password,权限要求 system:user:update-password
  • 修改状态:PUT /system/user/update-status,权限要求 system:user:update
  • 分页查询:GET /system/user/page,权限要求 system:user:query
  • 精简列表:GET /system/user/list-all-simple,仅返回启用用户
  • 获取详情:GET /system/user/get?id=...,权限要求 system:user:query
  • 导出用户:GET /system/user/export,权限要求 system:user:export
  • 导入模板:GET /system/user/get-import-template
  • 导入用户:POST /system/user/import,权限要求 system:user:import

Mermaid Diagram Code:

sequenceDiagram
participant Client as "客户端"
participant Ctrl as "UserController"
participant Svc as "AdminUserService"
Client->>Ctrl : GET /system/user/page
Ctrl->>Svc : getUserPage(pageReqVO)
Svc-->>Ctrl : PageResult<AdminUserDO>
Ctrl-->>Client : 返回分页数据

图表来源

章节来源

密码管理与个人资料

  • 修改个人密码:PUT /system/user/profile/update-password,需提供旧密码与新密码
  • 更新个人资料:PUT /system/user/profile/update,支持昵称、邮箱、手机号、性别
  • 上传头像:POST/PUT /system/user/profile/update-avatar,支持文件上传
  • 重置他人密码:PUT /system/user/update-password,管理员权限

Mermaid Diagram Code:

flowchart TD
Start(["进入密码修改流程"]) --> CheckOld["校验旧密码是否正确"]
CheckOld --> OldOK{"旧密码正确?"}
OldOK --> |否| ReturnFail["返回失败"]
OldOK --> |是| ValidateNew["校验新密码长度与格式"]
ValidateNew --> NewOK{"新密码合法?"}
NewOK --> |否| ReturnFail
NewOK --> |是| Encrypt["加密新密码"]
Encrypt --> Save["持久化保存"]
Save --> Done(["完成"])
ReturnFail --> Done

图表来源

章节来源

登录认证与权限信息

  • 账号密码登录:POST /system/auth/login
  • 登出:POST /system/auth/logout
  • 刷新令牌:GET /system/auth/refresh-token?refreshToken=...
  • 获取权限信息:GET /system/auth/get-permission-info
  • 注册:POST /system/auth/register
  • 短信登录:POST /system/auth/sms-login
  • 发送短信验证码:POST /system/auth/send-sms-code
  • 重置密码:POST /system/auth/reset-password
  • 社交登录:GET /system/auth/social-auth-redirect 与 POST /system/auth/social-login

Mermaid Diagram Code:

sequenceDiagram
participant Client as "客户端"
participant Auth as "AuthController"
participant Svc as "AdminUserService"
participant Perm as "PermissionService"
participant Role as "RoleService"
participant Menu as "MenuService"
Client->>Auth : GET /system/auth/get-permission-info
Auth->>Svc : getUser(loginUserId)
Svc-->>Auth : AdminUserDO
Auth->>Perm : getUserRoleIdListByUserId(userId)
Perm-->>Auth : roleIds
Auth->>Role : getRoleList(roleIds)
Role-->>Auth : roles(过滤禁用)
Auth->>Perm : getRoleMenuListByRoleId(roleIds)
Perm-->>Auth : menuIds
Auth->>Menu : getMenuList(menuIds)
Menu-->>Auth : menuList(过滤禁用)
Auth-->>Client : 返回用户+角色+菜单权限信息

图表来源

章节来源

RPC查询用户

  • AdminUserApi 提供通过用户ID查询用户的基础RPC接口,供其他模块调用
  • AdminUserApiImpl 实现该接口,结合服务层与部门服务拼装返回DTO

章节来源

权限控制与安全防护

  • 基于Spring Security的注解权限控制,如 @PreAuthorize("@ss.hasPermission(...)") 限定接口权限
  • 登录校验:AuthController.login 使用认证服务完成登录
  • 会话管理:通过SecurityProperties与SecurityFrameworkUtils获取与解析令牌
  • 安全防护:密码采用BCrypt加密存储;手机号长度校验;邮箱格式校验;密码长度与格式校验

章节来源

依赖关系分析

  • 控制层依赖服务层:UserController、AuthController、UserProfileController均注入AdminUserService
  • 服务层依赖数据层:AdminUserService实现中使用AdminUserDO进行持久化
  • API层依赖服务层:AdminUserApiImpl通过AdminUserService提供RPC查询
  • VO层作为参数与响应载体,贯穿控制层与服务层

Mermaid Diagram Code:

graph LR
UC["UserController"] --> USI["AdminUserService"]
AC["AuthController"] --> USI
UPC["UserProfileController"] --> USI
UAI["AdminUserApiImpl"] --> USI
USI --> UDO["AdminUserDO"]

图表来源

章节来源

性能考虑

  • 分页查询:UserController.page接口返回PageResult,避免一次性加载大量用户数据
  • 精简列表:list-all-simple仅返回启用用户,减少前端渲染压力
  • 导出:export接口设置pageSize为无限制,配合内存分批处理,注意大数量导出的内存占用
  • 头像上传:头像文件流式处理,避免大文件内存溢出
  • 密码校验:服务层提供isPasswordMatch方法,避免重复加盐与比对逻辑

故障排查指南

  • 登录失败:检查用户名/密码是否正确,确认用户状态为启用;查看AuthController.login返回的错误信息
  • 权限不足:确认调用接口所需的权限标识是否具备,如 system:user:create、system:user:query
  • 密码修改失败:确认旧密码正确且新密码满足长度与格式要求
  • 导入失败:核对Excel模板字段与类型,确保手机号长度为11位、邮箱格式正确、状态值合法
  • 头像上传失败:确认文件非空且为允许的图片格式

章节来源

结论

用户管理系统以清晰的分层架构实现了用户全生命周期管理,结合认证与权限体系,提供了完善的登录、密码管理、状态控制与数据查询能力。通过RPC接口与VO参数校验,系统具备良好的扩展性与安全性。建议在生产环境中重点关注大分页与大文件处理的性能优化,以及权限与数据范围的严格控制。

附录

RESTful API 接口清单

  • 用户管理

    • 新增用户
      • 方法:POST
      • 路径:/system/user/create
      • 权限:system:user:create
      • 请求体:UserSaveReqVO
      • 响应:CommonResult<Long>
    • 修改用户
      • 方法:PUT
      • 路径:/system/user/update
      • 权限:system:user:update
      • 请求体:UserSaveReqVO
      • 响应:CommonResult<Boolean>
    • 删除用户
      • 方法:DELETE
      • 路径:/system/user/delete
      • 权限:system:user:delete
      • 查询参数:id(Long)
      • 响应:CommonResult<Boolean>
    • 重置用户密码
      • 方法:PUT
      • 路径:/system/user/update-password
      • 权限:system:user:update-password
      • 请求体:UserUpdatePasswordReqVO
      • 响应:CommonResult<Boolean>
    • 修改用户状态
      • 方法:PUT
      • 路径:/system/user/update-status
      • 权限:system:user:update
      • 请求体:UserUpdateStatusReqVO
      • 响应:CommonResult<Boolean>
    • 获得用户分页列表
      • 方法:GET
      • 路径:/system/user/page
      • 权限:system:user:query
      • 查询参数:UserPageReqVO
      • 响应:CommonResult<PageResult<UserRespVO>>
    • 获取用户精简列表
      • 方法:GET
      • 路径:/system/user/list-all-simple
      • 响应:CommonResult<List<UserSimpleRespVO>>
    • 获得用户详情
      • 方法:GET
      • 路径:/system/user/get
      • 权限:system:user:query
      • 查询参数:id(Long)
      • 响应:CommonResult<UserRespVO>
    • 导出用户
      • 方法:GET
      • 路径:/system/user/export
      • 权限:system:user:export
      • 查询参数:UserPageReqVO
      • 响应:void(Excel文件)
    • 获得导入用户模板
      • 方法:GET
      • 路径:/system/user/get-import-template
      • 响应:void(Excel文件)
    • 导入用户
      • 方法:POST
      • 路径:/system/user/import
      • 权限:system:user:import
      • 查询参数:file(MultipartFile), updateSupport(Boolean)
      • 响应:CommonResult<UserImportRespVO>
  • 认证与权限

    • 账号密码登录
      • 方法:POST
      • 路径:/system/auth/login
      • 权限:permitAll
      • 请求体:AuthLoginReqVO
      • 响应:CommonResult<AuthLoginRespVO>
    • 登出
      • 方法:POST
      • 路径:/system/auth/logout
      • 权限:permitAll
      • 请求体:无
      • 响应:CommonResult<Boolean>
    • 刷新令牌
      • 方法:GET
      • 路径:/system/auth/refresh-token
      • 权限:permitAll
      • 查询参数:refreshToken(String)
      • 响应:CommonResult<AuthLoginRespVO>
    • 获取权限信息
      • 方法:GET
      • 路径:/system/auth/get-permission-info
      • 权限:authenticated
      • 响应:CommonResult<AuthPermissionInfoRespVO>
    • 注册
      • 方法:POST
      • 路径:/system/auth/register
      • 权限:permitAll
      • 请求体:AuthRegisterReqVO
      • 响应:CommonResult<AuthLoginRespVO>
    • 短信登录
      • 方法:POST
      • 路径:/system/auth/sms-login
      • 权限:permitAll
      • 请求体:AuthSmsLoginReqVO
      • 响应:CommonResult<AuthLoginRespVO>
    • 发送短信验证码
      • 方法:POST
      • 路径:/system/auth/send-sms-code
      • 权限:permitAll
      • 请求体:AuthSmsSendReqVO
      • 响应:CommonResult<Boolean>
    • 重置密码
      • 方法:POST
      • 路径:/system/auth/reset-password
      • 权限:permitAll
      • 请求体:AuthResetPasswordReqVO
      • 响应:CommonResult<Boolean>
    • 社交授权跳转
      • 方法:GET
      • 路径:/system/auth/social-auth-redirect
      • 权限:permitAll
      • 查询参数:type(Integer), redirectUri(String)
      • 响应:CommonResult<String>
    • 社交快捷登录
      • 方法:POST
      • 路径:/system/auth/social-login
      • 权限:permitAll
      • 请求体:AuthSocialLoginReqVO
      • 响应:CommonResult<AuthLoginRespVO>
  • 用户个人资料

    • 更新个人资料
      • 方法:PUT
      • 路径:/system/user/profile/update
      • 权限:authenticated
      • 请求体:UserProfileUpdateReqVO
      • 响应:CommonResult<Boolean>
    • 修改个人密码
      • 方法:PUT
      • 路径:/system/user/profile/update-password
      • 权限:authenticated
      • 请求体:UserProfileUpdatePasswordReqVO
      • 响应:CommonResult<Boolean>
    • 上传个人头像
      • 方法:POST/PUT
      • 路径:/system/user/profile/update-avatar
      • 权限:authenticated
      • 请求参数:avatarFile(MultipartFile)
      • 响应:CommonResult<String>

章节来源

数据模型与字段说明

  • AdminUserDO 字段
    • id:用户ID
    • username:用户名
    • password:加密后的密码
    • nickname:用户昵称
    • remark:备注
    • deptId:部门ID
    • postIds:岗位ID集合(JSON)
    • email:邮箱
    • mobile:手机号
    • sex:性别(SexEnum)
    • avatar:头像URL
    • status:状态(CommonStatusEnum)
    • loginIp:最后登录IP
    • loginDate:最后登录时间

章节来源

最佳实践

  • 密码管理
    • 使用强密码策略,长度与复杂度要求
    • 旧密码校验通过后再更新新密码
    • 密码采用BCrypt加密存储
  • 权限控制
    • 为每个接口配置精确的权限标识
    • 使用PreAuthorize注解进行细粒度权限控制
  • 性能优化
    • 分页查询与精简列表优先
    • 大文件上传采用流式处理
    • 导出时注意内存与IO开销
  • 安全加固
    • 输入参数严格校验(长度、格式、枚举值)
    • 登录失败次数限制与封禁策略
    • 会话令牌安全存储与刷新机制

章节来源

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答