批量添加用户和小组名单导入
本章面向课程助教和系统管理员, 说明如何批量开放学生注册, 以及按课程名单
一次性维护小组、组长和成员关系. 这些操作需要使用带有 sudo: true 的管理员
账号, 在 SECoder 的 管理员 页面完成.
操作前检查
- 使用管理员账号登录 SECoder, 通过侧边栏进入 管理员 页面.
- 确认课程名单中的学生学号准确无误, 并准备好每位学生的初始密码.
- 如果平台启用了 只读模式, 批量添加用户和应用小组名单都会被禁止. 小组 名单仍可以上传并预览, 但必须先关闭只读模式才能应用.
建议先批量添加用户, 等学生完成注册并在用户访问列表中显示为 已注册 后, 再导入小组名单. 小组名单导入只接受已经注册、未封禁且非 sudo 的学生.
批量添加用户
批量添加用户只会把学号加入注册访问名单, 不会直接创建学生账号. 学生仍需使用 该学号和初始密码自行注册.
准备用户文件
创建 UTF-8 编码的纯文本文件, 每行一名学生, 格式为:
学号:初始密码
例如:
20260001:initial-password-1
20260002:initial-password-2
20260003:initial-password-3
文件处理规则如下:
- 空行会被忽略.
- 没有冒号, 或冒号前后任一部分为空的行会失败.
- 文件中的每条记录会独立提交; 某条记录失败不会撤销其他已经成功的记录.
- 已在注册访问名单中但尚未注册的学号会更新初始密码, 同时清除封禁状态.
- 已经注册的用户不能通过此操作重复添加; 如果只是要恢复其访问权限, 使用用户 列表中的 解封用户 操作.
上传文件
在 管理员 页面的 用户访问控制 区域:
- 点击 批量添加用户.
- 选择准备好的纯文本文件.
- 等待页面显示处理结果.
- 检查 success 和 failed 数量. 对失败的学号修正文件或核对用户状态后, 单独重新处理.
处理结束后, 用户访问列表会刷新. 列表中的 允许 表示该学号可以注册; 已注册 表示学生已经完成账号注册. 只有允许注册不代表学生已经加入小组.
导入小组名单
小组名单导入是全量同步操作, 不是只追加某几个成员的增量操作. 文件必须同时 包含现有小组和所有需要纳入名单的学生; 系统会根据文件计算创建小组、修改名称、 转移组长以及调整学生成员关系.
CSV 格式
创建 UTF-8 编码的 CSV 文件. 表头必须精确使用 CodeName、DisplayName、
Leader 和连续的 Member1、Member2 等列, 至少包含 Member1:
CodeName,DisplayName,Leader,Member1,Member2,Member3
team-a,第一组,20260001,20260002,20260003
team-b,第二组,20260004,20260005,
,,,20260006,
每列含义和填写规则:
CodeName是小组不可变且唯一的标识符. 必须是规范的 RFC 1035 名称: 使用小写 英文字符、数字和连字符, 长度不超过 63, 且不能以连字符开头或结尾.DisplayName是显示给用户的小组名称. 小组行必须填写; 已存在的小组可以通过 修改该列来重命名.Leader是组长学号. 组长会自动计入该小组成员, 不要在Member列中重复填写.Member1、Member2等列填写其他成员学号. 列名必须连续, 不能跳过编号.CodeName、DisplayName和Leader同时为空的行表示未分组学生. 这类行最多 一行, 学生学号填写在Member列中.
导入前必须满足以下完整性要求:
- 每个现有小组都必须在 CSV 中出现; 不存在的
CodeName会创建为新小组. - 每个已注册、未封禁、非 sudo 学生都必须出现且只能出现一次, 可以出现在某个小组 或未分组行中.
- 不能填写未注册、已封禁或 sudo 账号.
- 同一个
CodeName、学生学号或组长不能在名单中重复出现. - 小组行必须同时有
DisplayName和Leader.
上传、预览和应用
在 管理员 页面的 小组名单导入 区域:
- 点击 上传并预览 CSV, 选择名单文件.
- 先处理页面显示的验证错误. 页面会指出错误所在的行、列和原因; 文件验证 不通过时不能应用任何变更.
- 验证通过后, 检查 已验证的变更 区域, 重点核对新建小组、重命名、组长变更、 学生变更和取消分组数量, 以及下方的具体变更列表.
- 确认预览内容与课程名单一致后, 点击 应用名单.
- 在确认对话框中再次确认. 系统会在一个数据库事务中应用小组名称、组长、学生 成员关系和相关邀请.
应用成功后, 系统会刷新用户访问列表, 并同步小组 Kubernetes namespace 的 tenant label. 如果 label 同步失败, 页面会列出受影响的小组; 重新预览并应用同一份 CSV 即可重试. 如果预览后数据库中的名单发生变化, 应重新上传 CSV 获取新的预览后再应用.
小组名单导入不会自动修改 GitLab 子组成员. 学生仍需在个人资料页面点击 同步 GitLab 子组 来触发个人 GitLab 权限同步.
推荐工作顺序
- 用 批量添加用户 上传课程学生的学号和初始密码.
- 通知学生完成注册, 在 用户访问控制 列表核对注册状态.
- 根据已注册学生生成包含全部小组和未分组学生的完整 CSV.
- 上传并预览 CSV, 逐项检查变更摘要和明细.
- 确认无误后应用名单, 再抽查用户访问列表和小组成员关系.
名单导入是全量操作. 后续调整名单时, 仍应上传包含全部现有小组和全部在用学生 的最新完整文件, 不要只上传新增成员的片段.