在线考试系统设计总案(第二部分)------用户管理模块详细设计
一、模块承接与定位
在《在线考试系统设计总案(第一部分)》的核心模块梳理中,明确了用户管理模块是系统的基础支撑模块,为所有其他七大核心模块(知识点管理、试题管理、试卷管理、考试管理、在线考试、阅卷评分、考试分析)提供全流程的身份验证与权限支撑。本模块的设计质量直接决定系统权限管控的安全性、角色适配的精准性以及业务流程的顺畅性,是保障"教、考、评、析"全链路闭环管理有效落地的核心前提。
基于系统"业务流程标准化、数据流转一体化、功能扩展模块化"的设计原则,用户管理模块以"全角色生命周期覆盖、精细化权限管控、灵活扩展适配、数据安全可追溯"为四大核心目标,构建"用户-角色-权限"三层管控体系。该体系通过将用户与权限进行解耦,先定义角色的权限集合,再为用户分配对应角色,实现权限的批量管控与灵活调整。在角色设计上,既覆盖当前教育教学场景中管理员、教师、学生等基础角色的核心需求,也预留了角色扩展接口,支持后续新增巡考教师、教研组长、数据管理员、家长等个性化角色,可根据不同机构的教学管理模式灵活配置权限,最终实现与各业务模块的无缝衔接,保障系统在不同教学场景下的适配性。
二、用户管理模块总体架构图
模块总体架构采用"三层架构+服务化设计",自上而下分为接口层、业务逻辑层、数据访问层,同时联动系统权限中心与外部集成服务,确保功能独立且可复用。
外部联动服务
数据访问层
业务逻辑层
接口层
用户操作接口
角色管理接口
权限校验接口
用户生命周期管理服务
角色权限管理服务
数据校验处理服务
用户数据DAO
角色数据DAO
权限数据DAO
系统权限中心
外部身份同步
LDAP/AD
操作日志服务
各层级核心职责说明:
| 层级 | 组件 | 核心职责 | 关键技术点 |
|---|---|---|---|
| 接口层 | 用户操作接口 | 提供用户增删改查、状态管理、密码重置等RESTful接口 | RESTful API设计、参数校验、响应格式化 |
| 角色管理接口 | 提供角色创建、修改、删除、权限分配等接口 | 权限树形结构、角色继承机制 | |
| 权限校验接口 | 提供实时权限校验、权限列表查询等接口 | 权限缓存、快速校验算法 | |
| 业务逻辑层 | 用户生命周期管理服务 | 处理用户全生命周期状态流转、数据同步、通知发送 | 状态机设计、异步处理、事件驱动 |
| 角色权限管理服务 | 处理角色权限的分配、校验、继承关系维护 | RBAC模型、权限继承、数据权限控制 | |
| 数据校验处理服务 | 处理用户数据的格式校验、唯一性校验、关联性校验 | 数据校验规则引擎、批量处理优化 | |
| 数据访问层 | 用户数据DAO | 封装用户基础数据的增删改查操作 | 数据分页、条件查询优化 |
| 角色数据DAO | 封装角色和权限数据的操作 | 树形结构存储、关联查询优化 | |
| 权限数据DAO | 封装权限数据的具体操作 | 权限缓存策略、数据同步机制 | |
| 外部联动服务 | 系统权限中心 | 统一权限校验中心,确保权限一致性 | 分布式权限同步、权限变更通知 |
| 外部身份同步 | 与LDAP/AD等企业身份系统同步用户数据 | 双向同步、增量同步、冲突解决 | |
| 操作日志服务 | 记录用户所有关键操作日志 | 操作审计、行为分析、安全追溯 |
三、核心业务时序图
3.1 用户创建与角色分配时序图
操作日志服务 数据库 系统权限中心 用户管理模块 管理员端 操作日志服务 数据库 系统权限中心 用户管理模块 管理员端 alt [角色无效] [角色有效] alt [参数不合法] [参数合法] 1.提交用户创建请求 (含基本信息+角色标识) 2.校验请求参数合法性 (必填项、格式) 3.返回参数错误提示 4.查询角色标识有效性 5.返回角色信息(有效/无效) 6.返回角色不存在提示 7.插入用户基础数据 8.返回用户ID 9.请求角色权限关联 (用户ID+角色ID) 10.返回权限关联结果 11.更新用户角色关联数据 12.返回更新成功 13.记录用户创建操作日志 14.返回日志记录成功 15.返回用户创建成功(含用户ID)
3.2 批量导入用户时序图
操作日志服务 系统权限中心 通知服务 数据库 数据校验服务 用户管理模块 管理员端 操作日志服务 系统权限中心 通知服务 数据库 数据校验服务 用户管理模块 管理员端 1.下载标准导入模板 2.返回Excel模板文件 3.上传填写完成的Excel文件 4.提交批量数据校验请求 5.逐行校验数据 (唯一性、格式、关联性) 6.返回校验结果 (成功条数/失败条数+原因) 7.展示校验结果 8.确认导入有效数据 9.批量插入有效用户数据 10.返回批量插入结果 11.批量关联角色权限 12.返回权限关联结果 13.发送初始化通知 (密码/账号信息) 14.返回通知发送结果 15.记录批量导入操作日志 16.返回批量导入完成 (含导入报告) 17.提供失败数据下载 (含失败原因)
3.3 用户权限校验时序图(对接业务模块)

四、核心功能详细介绍
4.1 用户生命周期管理
4.1.1 多渠道用户创建
yaml
用户创建方式对比表:
手动创建:
适用场景: 少量用户新增、特殊用户创建
操作流程:
1. 填写用户基本信息表单
2. 选择角色和所属组织
3. 系统生成初始密码
4. 发送激活通知
优点: 精确控制、信息完整
缺点: 效率低、易出错
批量导入:
适用场景: 批量学生/教师导入
操作流程:
1. 下载标准Excel模板
2. 填写用户数据(支持公式验证)
3. 上传文件,系统自动校验
4. 查看校验报告,确认导入
5. 系统批量创建并发送通知
优点: 效率高、统一格式
缺点: 模板要求严格、数据量大易出错
外部系统同步:
适用场景: 已有统一身份认证系统
同步模式:
- 实时同步: 用户变更即时同步
- 定时同步: 每天/每周定时同步
- 手动同步: 管理员手动触发
字段映射:
系统字段: 姓名、学号/工号、邮箱...
LDAP/AD字段: cn、uid、mail...
冲突处理: 优先使用系统数据/提示冲突
自主注册:
适用场景: 零星用户加入
注册流程:
1. 用户填写注册申请
2. 提交身份证明材料
3. 管理员审核
审核要点: 身份真实性、组织有效性
4.1.2 用户信息维护矩阵
| 信息类别 | 管理员权限 | 教师权限 | 学生权限 | 修改记录 |
|---|---|---|---|---|
| 基本信息 | 全部可修改 | 仅本人可修改 | 仅本人可修改 | 记录变更 |
| 姓名 | ✓ | 需审核 | 需审核 | ✓ |
| 学号/工号 | ✓ | × | × | ✓ |
| 性别 | ✓ | ✓ | ✓ | ✓ |
| 出生日期 | ✓ | ✓ | ✓ | ✓ |
| 联系信息 | 全部可修改 | 本人可修改 | 本人可修改 | 记录变更 |
| 手机号 | ✓ | ✓(需验证) | ✓(需验证) | ✓ |
| 邮箱 | ✓ | ✓(需验证) | ✓(需验证) | ✓ |
| 通讯地址 | ✓ | ✓ | ✓ | ✓ |
| 账号信息 | 全部可修改 | 仅本人密码 | 仅本人密码 | 安全记录 |
| 密码 | ✓(重置) | ✓(修改) | ✓(修改) | 安全日志 |
| 安全问题 | ✓ | ✓ | ✓ | ✓ |
| 组织信息 | 全部可修改 | × | × | 记录变更 |
| 所属班级 | ✓ | × | × | ✓ |
| 所属年级 | ✓ | × | × | ✓ |
| 所属科室 | ✓ | × | × | ✓ |
| 角色权限 | 全部可修改 | × | × | 权限日志 |
| 角色分配 | ✓ | × | × | 权限变更记录 |
| 权限调整 | ✓ | × | × | 权限变更记录 |
4.1.3 用户状态管理规则
sql
-- 用户状态定义表
CREATE TABLE user_status_rule (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
status_code TINYINT NOT NULL COMMENT '状态代码: 0-正常,1-冻结,2-归档,3-回收',
status_name VARCHAR(20) NOT NULL COMMENT '状态名称',
description VARCHAR(200) COMMENT '状态描述',
login_allowed BOOLEAN DEFAULT TRUE COMMENT '是否允许登录',
operation_allowed BOOLEAN DEFAULT TRUE COMMENT '是否允许操作',
auto_transition BOOLEAN DEFAULT FALSE COMMENT '是否自动转换',
transition_condition JSON COMMENT '自动转换条件',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 状态流转规则表
CREATE TABLE status_transition_rule (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
from_status TINYINT NOT NULL COMMENT '源状态',
to_status TINYINT NOT NULL COMMENT '目标状态',
allowed BOOLEAN DEFAULT TRUE COMMENT '是否允许流转',
require_reason BOOLEAN DEFAULT FALSE COMMENT '是否需要原因',
require_approval BOOLEAN DEFAULT FALSE COMMENT '是否需要审批',
approval_level TINYINT DEFAULT 0 COMMENT '审批级别',
operation_type VARCHAR(50) COMMENT '操作类型: manual/auto',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_from_to (from_status, to_status)
);
-- 状态流转记录表
CREATE TABLE user_status_log (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
from_status TINYINT COMMENT '原状态',
to_status TINYINT NOT NULL COMMENT '新状态',
operator_id BIGINT COMMENT '操作人ID',
operation_type VARCHAR(20) COMMENT '操作类型',
reason VARCHAR(500) COMMENT '变更原因',
effective_time DATETIME COMMENT '生效时间',
expiration_time DATETIME COMMENT '过期时间',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_operation_time (create_time)
);
4.2 角色权限管理
4.2.1 角色管理详细设计
sql
-- 角色表结构设计
CREATE TABLE system_role (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
role_code VARCHAR(50) UNIQUE NOT NULL COMMENT '角色代码,如:ADMIN,TEACHER,STUDENT',
role_name VARCHAR(50) NOT NULL COMMENT '角色名称',
role_type VARCHAR(20) NOT NULL COMMENT '角色类型: SYSTEM/BUSINESS/CUSTOM',
description VARCHAR(200) COMMENT '角色描述',
parent_role_id BIGINT COMMENT '父角色ID,用于权限继承',
level TINYINT DEFAULT 1 COMMENT '角色层级',
is_system BOOLEAN DEFAULT FALSE COMMENT '是否系统预设角色',
status TINYINT DEFAULT 1 COMMENT '状态: 1-启用,0-禁用',
sort_order INT DEFAULT 0 COMMENT '排序序号',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_parent_role (parent_role_id),
INDEX idx_role_type (role_type)
);
-- 用户角色关联表
CREATE TABLE user_role (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
role_id BIGINT NOT NULL COMMENT '角色ID',
scope_type VARCHAR(20) COMMENT '权限范围类型: ALL/GRADE/CLASS/SUBJECT',
scope_value JSON COMMENT '权限范围值,如班级ID列表',
effective_time DATETIME COMMENT '生效时间',
expiration_time DATETIME COMMENT '失效时间',
status TINYINT DEFAULT 1 COMMENT '状态: 1-有效,0-无效',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_role (user_id, role_id),
INDEX idx_user_id (user_id),
INDEX idx_role_id (role_id),
FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE,
FOREIGN KEY (role_id) REFERENCES system_role(id) ON DELETE CASCADE
);
-- 角色继承关系表
CREATE TABLE role_hierarchy (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
ancestor_role_id BIGINT NOT NULL COMMENT '祖先角色ID',
descendant_role_id BIGINT NOT NULL COMMENT '后代角色ID',
depth INT NOT NULL COMMENT '继承深度',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_ancestor_descendant (ancestor_role_id, descendant_role_id),
INDEX idx_descendant (descendant_role_id),
FOREIGN KEY (ancestor_role_id) REFERENCES system_role(id) ON DELETE CASCADE,
FOREIGN KEY (descendant_role_id) REFERENCES system_role(id) ON DELETE CASCADE
);
4.2.2 权限管理系统设计
sql
-- 权限表
CREATE TABLE system_permission (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
permission_code VARCHAR(100) UNIQUE NOT NULL COMMENT '权限代码,格式:模块:操作:资源',
permission_name VARCHAR(100) NOT NULL COMMENT '权限名称',
permission_type VARCHAR(20) COMMENT '权限类型: MENU/BUTTON/API/DATA',
resource_type VARCHAR(50) COMMENT '资源类型',
resource_id VARCHAR(100) COMMENT '资源ID',
parent_id BIGINT DEFAULT 0 COMMENT '父权限ID,用于权限树',
level TINYINT DEFAULT 1 COMMENT '权限层级',
description VARCHAR(200) COMMENT '权限描述',
status TINYINT DEFAULT 1 COMMENT '状态: 1-启用,0-禁用',
sort_order INT DEFAULT 0 COMMENT '排序序号',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_parent_id (parent_id),
INDEX idx_permission_type (permission_type)
);
-- 角色权限关联表
CREATE TABLE role_permission (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
role_id BIGINT NOT NULL COMMENT '角色ID',
permission_id BIGINT NOT NULL COMMENT '权限ID',
data_scope VARCHAR(20) DEFAULT 'SELF' COMMENT '数据权限范围: ALL/DEPT/SELF',
extra_condition JSON COMMENT '额外权限条件',
status TINYINT DEFAULT 1 COMMENT '状态: 1-有效,0-无效',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_role_permission (role_id, permission_id),
INDEX idx_role_id (role_id),
INDEX idx_permission_id (permission_id),
FOREIGN KEY (role_id) REFERENCES system_role(id) ON DELETE CASCADE,
FOREIGN KEY (permission_id) REFERENCES system_permission(id) ON DELETE CASCADE
);
-- 权限校验缓存表
CREATE TABLE permission_cache (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
permission_code VARCHAR(100) NOT NULL COMMENT '权限代码',
has_permission BOOLEAN NOT NULL COMMENT '是否有权限',
data_scope VARCHAR(20) COMMENT '数据权限范围',
cache_time DATETIME NOT NULL COMMENT '缓存时间',
expire_time DATETIME NOT NULL COMMENT '过期时间',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_permission (user_id, permission_code),
INDEX idx_user_id (user_id),
INDEX idx_expire_time (expire_time)
);
4.3 数据管理与集成
4.3.1 数据存储设计优化
sql
-- 用户表优化设计
CREATE TABLE user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL COMMENT '用户名(登录名)',
password VARCHAR(100) NOT NULL COMMENT '密码(BCrypt加密)',
user_type VARCHAR(20) NOT NULL COMMENT '用户类型: STUDENT/TEACHER/ADMIN',
real_name VARCHAR(50) NOT NULL COMMENT '真实姓名',
gender TINYINT COMMENT '性别: 0-女,1-男',
id_card VARCHAR(20) COMMENT '身份证号(加密存储)',
student_no VARCHAR(50) COMMENT '学号',
teacher_no VARCHAR(50) COMMENT '工号',
phone VARCHAR(20) COMMENT '手机号(加密存储)',
email VARCHAR(100) COMMENT '邮箱',
avatar_url VARCHAR(500) COMMENT '头像URL',
status TINYINT NOT NULL DEFAULT 0 COMMENT '状态: 0-正常,1-冻结,2-归档,3-回收',
register_source VARCHAR(20) COMMENT '注册来源: MANUAL/IMPORT/LDAP',
register_time DATETIME COMMENT '注册时间',
last_login_time DATETIME COMMENT '最后登录时间',
last_login_ip VARCHAR(50) COMMENT '最后登录IP',
login_count INT DEFAULT 0 COMMENT '登录次数',
password_update_time DATETIME COMMENT '密码更新时间',
password_error_count TINYINT DEFAULT 0 COMMENT '密码错误次数',
lock_time DATETIME COMMENT '锁定时间',
security_question JSON COMMENT '安全问题(加密存储)',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
create_by BIGINT COMMENT '创建人',
update_by BIGINT COMMENT '更新人',
version INT DEFAULT 1 COMMENT '数据版本',
UNIQUE KEY uk_username (username),
UNIQUE KEY uk_student_no (student_no),
UNIQUE KEY uk_teacher_no (teacher_no),
INDEX idx_user_type (user_type),
INDEX idx_status (status),
INDEX idx_create_time (create_time)
);
-- 用户扩展信息表(垂直分表)
CREATE TABLE user_ext_info (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
birth_date DATE COMMENT '出生日期',
native_place VARCHAR(100) COMMENT '籍贯',
political_status VARCHAR(20) COMMENT '政治面貌',
education_level VARCHAR(20) COMMENT '学历',
graduation_school VARCHAR(100) COMMENT '毕业学校',
major VARCHAR(50) COMMENT '专业',
entry_date DATE COMMENT '入学/入职日期',
graduation_date DATE COMMENT '毕业/离职日期',
class_id BIGINT COMMENT '班级ID',
grade_id BIGINT COMMENT '年级ID',
department_id BIGINT COMMENT '部门ID',
position VARCHAR(50) COMMENT '职务',
title VARCHAR(50) COMMENT '职称',
teaching_subjects JSON COMMENT '教学科目',
emergency_contact JSON COMMENT '紧急联系人',
address VARCHAR(200) COMMENT '通讯地址',
postal_code VARCHAR(20) COMMENT '邮政编码',
remark TEXT COMMENT '备注',
ext_data JSON COMMENT '扩展数据',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_id (user_id),
INDEX idx_class_id (class_id),
INDEX idx_grade_id (grade_id),
FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE
);
五、模块与其他业务模块的衔接关系
| 业务模块 | 用户管理依赖 | 权限校验点 | 数据关联 |
|---|---|---|---|
| 知识点管理 | 创建人信息、审核人信息 | 知识点创建、修改、审核权限 | 用户ID关联知识点创建者、审核者 |
| 试题管理 | 出题人信息、审核人信息 | 试题创建、编辑、审核、入库权限 | 用户ID关联试题创建者、审核者 |
| 试卷管理 | 组卷人信息、审核人信息 | 试卷创建、编辑、审核、发布权限 | 用户ID关联试卷创建者、审核者 |
| 考试管理 | 考生信息、监考人信息 | 考试创建、编辑、发布、监考权限 | 用户ID关联考试创建者、监考人、考生 |
| 在线考试 | 考生身份验证、状态检查 | 考试参加权限、考试状态检查 | 用户ID关联考试记录、答题记录 |
| 阅卷评分 | 阅卷人分配、成绩确认 | 阅卷权限、成绩复核权限 | 用户ID关联阅卷任务、评分记录 |
| 考试分析 | 分析对象筛选、报告查看 | 数据查看权限、分析报告生成权限 | 用户ID关联分析报告、权限控制数据范围 |
六、总结与后续衔接
用户管理模块通过"全生命周期用户管控+精细化角色权限管理+灵活外部集成"的设计,构建了系统的基础支撑能力,确保各业务模块的操作均有明确的身份标识与权限管控,为系统安全、高效运行提供保障。
本模块为整个在线考试系统奠定了坚实的基础。基于本模块的用户和权限体系,后续模块可以专注于业务逻辑的实现,而无需重复处理身份验证和权限控制问题。下一部分将聚焦知识点管理模块,阐述如何基于用户权限体系构建学科知识框架,实现知识点的层级化管理,以及与试题、试卷等模块的有机整合,进一步完善"教、考、评、析"全链路闭环设计。