一、功能概述
用户管理模块基于auth_user
表实现全生命周期管理,涵盖新增、修改、删除、注销(离职)、解锁、重置密码等操作,结合登录失败次数限制及账号锁定机制,保障系统账号安全。系统通过status
和user_status
字段区分账号状态与用户在职状态,实现精细化管理。
二、核心功能说明
(一)新增用户
操作路径:用户管理页面点击「新增」按钮,填写表单后提交。
系统自动填充字段:
user_id
:自动生成36位UUIDcreate_date
:当前时间戳create_user_id
/create_user_name
:当前操作用户信息delete_flag
:默认0(未删除)
唯一性校验规则:
- 新增时系统会校验工号、用户名、身份证号的唯一性
- 若工号已存在,提示“工号已存在,请勿重复添加”
- 若用户名已存在,提示“用户名已存在,请勿重复添加”
- 若身份证号对应的用户已存在且不是离职人员,提示“该身份证号对应的用户已存在,并且不是离职人员,请勿重复添加”
- 二次入职且工号不同时,可添加为新用户
密码处理:
- 初始密码使用
BCryptPasswordEncoder
加密存储 - 默认密码由配置文件中配置 默认密码配置。
- 初始密码使用
状态关联处理:
- 若用户状态设为离职(
UserStatusEnum.QUIT.code()
),则账号状态自动设为注销(LoginUserStatusEnum.LOGOUT.code()
) - 若未填写离职日期,系统自动填充当前日期为离职日期
- 非离职状态下,账号状态默认为正常(
LoginUserStatusEnum.NORMAL.code()
)
- 若用户状态设为离职(
(二)修改用户
操作路径:用户列表点击目标用户「修改」按钮,更新表单后保存。
可修改字段范围:
- 基本信息:
real_name
、nick_name
、email
、phone_number
、sex
、avatar
、remark
- 关联信息:所属部门、所属岗位、绑定角色
- 状态信息:
status
(1正常/2禁用)、user_status
(1实习/2转正)
- 基本信息:
不可修改字段:
user_id
、user_name
、job_number
(如需变更需删除重建)唯一性校验:与新增用户规则相同,但排除当前用户自身记录
角色分配限制:
- 管理员角色(角色ID为
2d0fb4174e9a106140a5793d2598ac00
)仅允许admin
和admin1
用户分配 - 非超管账号无法为其他用户添加管理员角色,除非该用户已拥有管理员角色
- 管理员角色(角色ID为
状态关联处理:与新增用户的状态关联规则一致
(三)删除用户
- 操作路径:用户列表点击「删除」按钮,二次确认后执行。
- 批量删除:支持选择多个用户进行批量删除操作
- 删除反馈:返回删除成功的用户数量
(四)注销-离职处理
- 操作路径:
- 单个注销:用户列表点击「注销」按钮
- 批量注销:选择多个用户后执行批量注销操作
- 字段更新规则:
表字段 更新值 说明 status
4(注销, LoginUserStatusEnum.LOGOUT.code()
)账号不可登录 user_status
3(离职, UserStatusEnum.QUIT.code()
)标记离职状态 dimission_date
当前日期 自动记录离职时间 - 操作反馈:返回注销成功的用户数量
(五)解锁用户
- 触发场景:用户连续登录失败次数达阈值后,
status
自动更新为3(锁定,LoginUserStatusEnum.LOCK.code()
),lock_date
记录锁定时间。 - 操作路径:用户列表筛选
status=3
的用户,点击「解锁」按钮。 - 操作限制:
- 仅对状态为锁定的用户可执行解锁操作
- 字段更新:
status
恢复为1(正常,LoginUserStatusEnum.NORMAL.code()
)- 清除Redis中该用户的登录失败次数记录(
RedisSecurityConstant.LOGIN_ERROR_NUMBER + ":" + 用户名
)
- 缓存处理:执行解锁操作后会清除
UserMapper
相关的Ehcache缓存
(六)重置密码
- 操作路径:用户列表点击「重置密码」按钮,系统自动生成新密码。
- 操作权限:仅管理员可执行此操作
- 密码处理:
- 新密码使用
BCryptPasswordEncoder
加密存储 - 重置后密码为系统默认密码 默认密码配置。
- 新密码使用
- 数据校验:会验证用户ID是否存在,不存在则抛出异常
(七)密码修改(用户自主操作)
- 操作路径:用户个人中心或专门的密码修改页面
- 输入要求:
- 必须输入原密码、新密码、确认密码
- 新密码长度须在6-18个字符之间
- 新密码不能与原密码相同
- 新密码须与确认密码一致
- 验证机制:
- 原密码会与数据库中加密存储的密码进行比对
- 原密码不正确会抛出异常提示
(八)个人信息修改
- 可修改信息:昵称、手机号码、性别、邮箱、头像
- 输入限制:
- 用户昵称须1-30个字符
- 手机号码不能超过11个字符
- 用户性别为必选项
- 用户邮箱不能超过50个字符
- 头像处理:
- 头像文件会存储到MinIO的
AUTH_BUCKET_NAME
桶中 - 存储路径为
userHead/工号
- 头像文件会存储到MinIO的
(九)禁用/启用用户
- 操作路径:用户列表点击「禁用」或「启用」按钮
- 状态转换规则:
- 对正常状态(
LoginUserStatusEnum.NORMAL.code()
)的用户执行操作,会将状态改为禁用(LoginUserStatusEnum.FORBIDDEN.code()
) - 对禁用状态的用户执行操作,会将状态改回正常
- 对正常状态(
- 操作限制:
- 对锁定、注销状态的用户执行此操作会抛出异常
- 数据校验:会验证用户是否存在,不存在则抛出异常
三、状态字段说明
状态类型 | 字段 | 取值 | 对应枚举 | 说明 |
---|---|---|---|---|
账号状态 | status | 1 | LoginUserStatusEnum.NORMAL | 可正常登录及操作 |
2 | LoginUserStatusEnum.FORBIDDEN | 管理员手动设置,不可登录 | ||
3 | LoginUserStatusEnum.LOCK | 登录失败次数超限,临时不可登录 | ||
4 | LoginUserStatusEnum.LOGOUT | 离职后账号状态,不可登录 | ||
用户状态 | user_status | 1 | UserStatusEnum.INTERNSHIP (实习) | 标识实习期间 |
2 | UserStatusEnum.REGULAR (转正) | 标识正式员工 | ||
3 | UserStatusEnum.QUIT (离职) | 标识已离职 |
四、登录失败锁定机制
- 触发规则:用户连续登录失败次数达配置阈值后,系统自动将
status
更新为3(锁定),并记录lock_date
。 - 解锁方式:
- 自动解锁:锁定时间超过配置时长后,
status
恢复为1(正常) - 手动解锁:管理员执行解锁操作(见本章第五节)
- 自动解锁:锁定时间超过配置时长后,
- 配置说明:登录失败允许次数及锁定时长的具体设置,参见系统安全配置说明。