Skip to content

User Guide

dxx114514-stack edited this page Oct 17, 2026 · 5 revisions

使用指南

角色权限

角色 说明 权限范围
用户 普通注册用户 做题、提交代码、使用 IDE(需登录)、查看提交记录、加入比赛、查看他人资料、发帖/回复讨论、虚拟参赛、查看题单
教师 题目管理者 创建/编辑题目、管理测试点、创建比赛、邀请用户、重测提交、发布文章、文件上传/图床、管理公告、置顶/加精/锁定讨论、发起代码查重、创建题单
管理员 用户管理者 管理权限低于自己或自己的用户(封禁/解封/强制登出)、删除提交、删除任意讨论
超级管理员 最高权限 所有权限 + 修改角色、重置密码、免密登录、管理语言、设置 Rating、自删除、设置图床限额、切换注册开关、创建用户/Excel 批量导入、用户组 Excel 批量导入(含自动注册)

权限校验原则:只能管理权限等级低于自己或自己的账号,不可管理同级。

用户功能

  • 题库:题目列表支持模糊搜索(忽略空格)、标签(预置 10 个算法标签)与 6 级难度多维筛选、分类浏览。
  • 提交:提交代码后实时接收评测状态(WebSocket);提交详情含每个测试点的时间/内存/错误说明;可查看与上一次提交的代码 Diff。
  • IDE:需登录;三阶段状态(审查中 → 编译中 → 运行中);支持队列模式与内存检测;可配置 AI 安全审查。
  • 比赛:邀请制参赛、排行榜封榜/解冻、赛后可发起虚拟比赛(独立计时、私有排行榜、同一比赛仅一次、不影响原榜)。
  • 讨论/题解区:题目详情页「讨论」Tab;楼中楼最多两层;教师可置顶/标记官方题解/锁定;Markdown 渲染经 DOMPurify 防 XSS。
  • 题单训练计划:按题单追踪解题进度(公开/私有)。
  • 个人数据:成就、数据看板、收藏、Rating 排行;三者均有独立隐私开关可对其他普通用户隐藏(admin/su 始终可见)。
  • 其他:黑夜模式一键切换、偏好语言自动选中、个性签名/个人简介(Markdown)、提交锁(有未完成提交时禁止再次提交,特权用户豁免)。

教师功能

  • 题目管理:创建/编辑题面(Markdown + KaTeX)、代码默认值、标签难度;测试点增删改查、ZIP/多文件批量上传、测试分组(Subtask)与题目级计分脚本。
  • AI 测试数据生成:管理面板一键生成正常 + 边界用例,自动写入磁盘并入库。
  • 试卷系统(v2.1.0):选择/判断/填空(客观、主观)/大题四种题型;配置时间限制、及格分、最大尝试次数;客观题自动评分,主观题支持 AI 评分(Ollama)与手动批改;题面支持 Excel 导入(「Excel 导入 / 下载模板」,站内示例 /exam-sample.xlsx)。
  • 比赛:创建比赛、添加题目、邀请用户、封榜控制(创建时设自动封榜分钟数,手动解封需管理员)、赛后一键代码查重。
  • 代码查重:题目/比赛维度异步查重;≥85% 高度相似(红)、≥70% 疑似(橙),并排对比、相同 token 高亮。
  • 内容运营:发布文章/题解、管理公告(支持 Markdown 与公式)、图床上传(教师及以上)。

管理员 / 超级管理员

  • 用户管理:创建用户(可生成随机强密码)、Excel 批量导入(中英文表头、角色中文别名)、封禁/解封、强制登出、重置密码、角色调整、注册开关、图床限额、提交锁豁免。
  • 语言管理(仅超管):动态添加/修改语言的编译、运行命令与扩展名。
  • Rating:修改/隐藏 Rating、查看排行榜。
  • 全局:删除任意提交/讨论、免密登录(sudo-login)、系统状态仪表盘(pages/status.html)。

用户组与可见性

每个账号在建号瞬间就会自动加入两个系统组,且不可退出:

系统组 kind 说明
所有用户 all_users 全局唯一一个,全体注册用户都在里面
个人组 personal 每人一个,显示名=用户名,所有者即本人

成员关系由数据库触发器在插入用户记录时自动写入,所以任何建号途径(自行注册、管理员建号、初始 admin)都覆盖,不存在"漏发组"的账号。系统组没有任何自助成员变更入口:改名、删除、增减成员都只对 admin/su 开放,对系统组一律拒绝(403 ERR_FORBIDDEN)。因此无法自行退出这两个组 —— 组是授权的单位,不是可以自由退出的成员关系。

管理员:建组与加成员

  1. 以管理员 / 超管登录管理面板 → 「用户组」tab。
  2. 新建组:填写名称(必填)与描述,创建后 kind 为自定义组、创建者为当前管理员。
  3. 组列表显示每个组的成员数与已绑定实体数;进入成员管理可分页查看成员(limit 上限 100),按用户名搜索后添加成员,或把成员移出组。
  4. 删除组时若仍绑定着实体,界面会提示受影响的题目 / 比赛 / 试卷 / 题单数量;选择「强制删除」即 ?force=1,受影响实体会先回退为公开再删组,不会留下"实体谁都看不见"的中间状态。系统组不提供改名/删除入口。

超管:批量导入成员(Excel)

成员成批出现的场景(新生集训、批量建的账号)不必一个个手动加,管理面板「用户组」tab 里可直接导入 Excel。

  1. 下载示例:点「下载示例」拿到 /group-sample.xlsx,照着它的列填。
  2. 填写表格:支持 .xlsx 与 .xls,只读第一个工作表;只需两列 —— 用户名(必填)与 昵称(选填)。也认 username/账号、nickname/姓名 这类别名,其它列一律忽略;文件里同一用户名重复出现只算一条;单次最多 500 行。
  3. 点「Excel 导入」:选择文件、确认目标自定义组,随后弹出默认密码输入框。
  4. 输入默认密码并确认:这个密码是本批次所有新注册账号的初始口令,两次输入须一致,≥8 位且含字母与数字或符号(与管理员建号同一强度);不满足则整单拒绝,什么都不写入。密码不回显,也不落盘到任何文件。
  5. 查看导入结果:界面给出「共 N 行:新增成员 X 人(其中自动注册 Y 人),已在组内 Z 人」,下面逐条列出失败行「用户名: 原因」。

几个必须先知道的前提:

  • 仅超级管理员可用:admin 及以下点按钮会提示「含未注册用户自动注册,需超级管理员」,直接调接口也一律 403。这是唯一被卡到 su 的导入入口 —— 理由就是它会顺带创建账号。
  • 仅自定义组可导入:个人组与「所有用户」系统组没有导入入口,服务端同样 403。
  • 自动注册出来的账号全部是普通用户(role=user):Excel 里填不了角色,自己加一列「角色」也会被忽略,所以导入文件无法用来提权。需要教师 / 管理员账号的,照常走「用户 → 角色调整」。
  • 默认密码是共用的:本批次所有新账号共用这一个初始口令,请务必告知成员首次登录后立刻修改;不希望共用的,就分批导入、每批换一个密码。
  • 失败行不影响其它行:某个用户名有问题只影响那一行,其余行照常入组。按 failed 指出的行改好后重新导入即可 —— 已经在组里的人不会重复加入(计入"已在组内")。
  • 整单被拒只有三种情况:行数超过 500、存在未注册账号却没填默认密码、默认密码不合规。这三种整个请求被拒、不写入任何数据,补齐后重传同一个文件即可。

管理员:把实体设为组可见

题目与比赛的可见性选择器在管理面板(题目编辑表单、比赛编辑表单),试卷与题单在各自的编辑页(exam-edit.html / problem-set-edit.html),均为两选一:

  • 公开(public):所有人可见,匿名访客也算(新建默认)。
  • 仅指定组可见(groups):只有绑定组成员(外加 teacher/admin/su)能看到,必须至少选一个组。

修改可见性与绑定组仅限 admin/su,teacher 操作返回 403(即使他是该题目/试卷的创建者);查看当前可见性设置与已绑定组则任何登录用户都可以。

学生:遇到 403 是什么意思

  • You do not have permission to view this problem.(比赛 / 试卷 / 题单是同款文案)表示:该实体被设为"仅指定组可见",而你不在任何一个绑定组里。不是题目被删了,也不是账号出问题了,请联系管理员把你加入对应组即可。
  • 列表页不会报错,只是看不到那些实体(静默过滤、不暴露存在性),所以"某道题突然不见了"通常就是这个原因。
  • 同一套判定也作用于提交、题解、讨论、AI 提示、收藏、词云与排行榜:不在组里时这些入口同样打不开。
  • 未登录的匿名访客只能看到 public 的实体。

Markdown 增强语法

在题目描述、文章、个人简介、公告等所有支持 Markdown 的位置可用:

语法 效果
$E=mc^2$ 行内数学公式
$$\sum_{i=1}^{n} i$$ 块级数学公式
@[bilibili](BV号) 嵌入 Bilibili 视频
@[url](URL) 嵌入任意网站 iframe
@[audio](URL) 嵌入音频播放器
@[video](URL) 嵌入视频播放器
@[office](URL) 嵌入 Office 文档(须公网 https)
@[echarts]({JSON}) 嵌入 ECharts 图表
@[mermaid] … @[/mermaid] Mermaid 流程图(包裹多行文本)

支持完整列表/表格/围栏代码块/引用等标准 Markdown(自研 renderMarkdown 解析器,见 pages/markdown-demo.html 交互演示页)。

验证码

自绘 SVG 验证码:字体字形转 <path> 轮廓(答案不写入 DOM,免疫 DOM 读取)、4 位字符(排除 O/0/I/1)、crypto.randomInt 随机、干扰线 + 湍流扭曲防 OCR;一次性使用,5 分钟有效,点击图片可刷新。开关见 配置说明。

相关文档

Clone this wiki locally