模块六:用户与权限
用户与权限模块负责管理员账号、角色、数据范围、密码重置和操作日志。所有登录角色都能进入“我的账户”修改自己的用户名和密码;只有获得相应权限的账号才能管理其他用户。
四个内置角色
| 角色 | 默认职责 |
|---|---|
| 超级管理员 | 管理全校数据、用户、角色、系统设置和部署 |
| 年级管理员 | 管理授权年级的考试、周测、班级、设备和下级用户 |
| 班级管理员 | 管理授权班级的周测、设备并查看适用考试 |
| 班级访客(原巡考员) | 按授权范围查看大型考试、周测、设备、提醒与设置,并支持导出 |
还可以创建自定义角色,按模块设置不可访问、仅查看或可管理。数据库重置、初始化、角色管理、部署和超级管理员操作仍只保留给超级管理员。
添加管理员
新建用户需要填写:
- 登录用户名;
- 显示名称;
- 初始密码,至少 8 位;
- 角色;
- 全校、年级或额外指定班级范围。
用户名使用 3 至 40 位字母、数字、点、横线或下划线。日常显示可使用中文显示名称。
批量创建班级管理员
支持一班一账号:
- 点击“批量添加班级管理员”;
- 设置用户名统一前缀;
- 设置初始密码;
- 使用班级选择器勾选目标班级;
- 确认创建数量;
- 保存创建结果并分别交付账号。
每个账号只获得对应班级作用域。年级管理员只能在自己的授权年级内批量创建,服务端会拒绝越权范围。
班级管理员首次登录必须同时设置自己的新用户名和新密码。两项凭据会一次性原子保存,成功后旧会话立即失效。
密码重置和找回
| 忘记密码的账号 | 可处理人员 |
|---|---|
| 班级管理员 | 所属年级管理员或超级管理员 |
| 年级管理员 | 超级管理员 |
| 超级管理员 | 其他超级管理员,或使用首次初始化时自动生成的恢复密钥 |
管理员重置密码时可自动生成 14 位临时密码,也可手动设置。临时密码只展示一次,关闭前必须安全交付;重置后旧会话立即失效,下次登录强制更新凭据。
超级管理员恢复密钥由项目在首次初始化后自动生成,明文只展示一次,数据库只保存加盐哈希。应保存到可信密码管理器或受控离线介质,不要交给普通管理员。
我的账户
后台“更多 → 我的账户”允许任何已登录角色:
- 修改自己的用户名;
- 修改自己的密码;
- 首次登录时同时设置新用户名和密码;
- 查看当前角色。
修改凭据后需要使用新信息重新登录。
邮箱验证码登录
V2.7.2 起,已有管理员账号可以绑定邮箱并使用“邮箱 + 6 位验证码”登录,作为密码登录之外的第二种方式。邮箱登录不会自动创建账号,只允许绑定到有效管理员账号的邮箱。
开启方式:
- 在系统设置中配置 SMTP(支持 QQ、163 等预设与自定义邮件服务器),并填写管理员邮箱白名单(可选)。
- 在“我的账户”或初始化向导中绑定自己的邮箱。
- 保存后,登录页会出现“验证码登录”入口;启用邮件服务后默认进入验证码登录,仍可切换到密码登录。
登录流程:
- 登录页切换到“验证码登录”,输入已绑定邮箱。
- 点击发送验证码;同一邮箱 60 秒内只能发送一次,同一 IP 每小时有次数限制。
- 输入 6 位验证码完成登录,验证码 5 分钟内有效且只能使用一次。
安全说明:
- SMTP 授权码加密存储,不在页面或接口中返回明文;
- 连续输入错误验证码会触发与密码登录一致的锁定规则;
- 部署时不需要新增环境变量,SMTP 与邮箱白名单都在系统内配置;
- 邮件发送走限速队列,失败自动重试退避,发送状态实时反馈。
角色权限
创建自定义角色时,先写清角色职责,再为各模块选择访问级别。不要为了省事授予全部权限,数据范围也不能替代模块权限。
例如,一名高一年级只读教务可以配置:
角色:班级访客或自定义只读角色
年级范围:高一
班级范围:按需
模块权限:只读大型考试、周测和学校结构操作日志
拥有审计权限的管理员可以查看操作时间、用户名、动作和资源 ID。出现误删、密码重置、权限变化或部署操作时,应先查日志,再决定是否恢复数据。
V2.8.0 起,动作名称统一显示为中文(例如「发送邮箱验证码」「下发设备指令:暂停考试」 「申请停止考试」),原始机器码只作为悬停提示保留,便于对照排查;识别不出的动作显示 「未识别的操作」,不会再裸显英文码。