Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

批量添加用户和小组名单导入

本章面向课程助教和系统管理员, 说明如何批量开放学生注册, 以及按课程名单 一次性维护小组、组长和成员关系. 这些操作需要使用带有 sudo: true 的管理员 账号, 在 SECoder 的 管理员 页面完成.

操作前检查

  1. 使用管理员账号登录 SECoder, 通过侧边栏进入 管理员 页面.
  2. 确认课程名单中的学生学号准确无误, 并准备好每位学生的初始密码.
  3. 如果平台启用了 只读模式, 批量添加用户和应用小组名单都会被禁止. 小组 名单仍可以上传并预览, 但必须先关闭只读模式才能应用.

建议先批量添加用户, 等学生完成注册并在用户访问列表中显示为 已注册 后, 再导入小组名单. 小组名单导入只接受已经注册、未封禁且非 sudo 的学生.

批量添加用户

批量添加用户只会把学号加入注册访问名单, 不会直接创建学生账号. 学生仍需使用 该学号和初始密码自行注册.

准备用户文件

创建 UTF-8 编码的纯文本文件, 每行一名学生, 格式为:

学号:初始密码

例如:

20260001:initial-password-1
20260002:initial-password-2
20260003:initial-password-3

文件处理规则如下:

  • 空行会被忽略.
  • 没有冒号, 或冒号前后任一部分为空的行会失败.
  • 文件中的每条记录会独立提交; 某条记录失败不会撤销其他已经成功的记录.
  • 已在注册访问名单中但尚未注册的学号会更新初始密码, 同时清除封禁状态.
  • 已经注册的用户不能通过此操作重复添加; 如果只是要恢复其访问权限, 使用用户 列表中的 解封用户 操作.

上传文件

在 管理员 页面的 用户访问控制 区域:

  1. 点击 批量添加用户.
  2. 选择准备好的纯文本文件.
  3. 等待页面显示处理结果.
  4. 检查 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.

上传、预览和应用

在 管理员 页面的 小组名单导入 区域:

  1. 点击 上传并预览 CSV, 选择名单文件.
  2. 先处理页面显示的验证错误. 页面会指出错误所在的行、列和原因; 文件验证 不通过时不能应用任何变更.
  3. 验证通过后, 检查 已验证的变更 区域, 重点核对新建小组、重命名、组长变更、 学生变更和取消分组数量, 以及下方的具体变更列表.
  4. 确认预览内容与课程名单一致后, 点击 应用名单.
  5. 在确认对话框中再次确认. 系统会在一个数据库事务中应用小组名称、组长、学生 成员关系和相关邀请.

应用成功后, 系统会刷新用户访问列表, 并同步小组 Kubernetes namespace 的 tenant label. 如果 label 同步失败, 页面会列出受影响的小组; 重新预览并应用同一份 CSV 即可重试. 如果预览后数据库中的名单发生变化, 应重新上传 CSV 获取新的预览后再应用.

小组名单导入不会自动修改 GitLab 子组成员. 学生仍需在个人资料页面点击 同步 GitLab 子组 来触发个人 GitLab 权限同步.

推荐工作顺序

  1. 用 批量添加用户 上传课程学生的学号和初始密码.
  2. 通知学生完成注册, 在 用户访问控制 列表核对注册状态.
  3. 根据已注册学生生成包含全部小组和未分组学生的完整 CSV.
  4. 上传并预览 CSV, 逐项检查变更摘要和明细.
  5. 确认无误后应用名单, 再抽查用户访问列表和小组成员关系.

名单导入是全量操作. 后续调整名单时, 仍应上传包含全部现有小组和全部在用学生 的最新完整文件, 不要只上传新增成员的片段.