Repository navigation
User Guide
| 角色 | 说明 | 权限范围 |
|---|---|---|
| 用户 | 普通注册用户 | 做题、提交代码、使用 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)。因此无法自行退出这两个组 —— 组是授权的单位,不是可以自由退出的成员关系。
- 以管理员 / 超管登录管理面板 → 「用户组」tab。
- 新建组:填写名称(必填)与描述,创建后
kind为自定义组、创建者为当前管理员。 - 组列表显示每个组的成员数与已绑定实体数;进入成员管理可分页查看成员(
limit上限 100),按用户名搜索后添加成员,或把成员移出组。 - 删除组时若仍绑定着实体,界面会提示受影响的题目 / 比赛 / 试卷 / 题单数量;选择「强制删除」即
?force=1,受影响实体会先回退为公开再删组,不会留下"实体谁都看不见"的中间状态。系统组不提供改名/删除入口。
成员成批出现的场景(新生集训、批量建的账号)不必一个个手动加,管理面板「用户组」tab 里可直接导入 Excel。
-
下载示例:点「下载示例」拿到
/group-sample.xlsx,照着它的列填。 -
填写表格:支持
.xlsx与.xls,只读第一个工作表;只需两列 ——用户名(必填)与昵称(选填)。也认username/账号、nickname/姓名这类别名,其它列一律忽略;文件里同一用户名重复出现只算一条;单次最多 500 行。 - 点「Excel 导入」:选择文件、确认目标自定义组,随后弹出默认密码输入框。
- 输入默认密码并确认:这个密码是本批次所有新注册账号的初始口令,两次输入须一致,≥8 位且含字母与数字或符号(与管理员建号同一强度);不满足则整单拒绝,什么都不写入。密码不回显,也不落盘到任何文件。
- 查看导入结果:界面给出「共 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(即使他是该题目/试卷的创建者);查看当前可见性设置与已绑定组则任何登录用户都可以。
-
You do not have permission to view this problem.(比赛 / 试卷 / 题单是同款文案)表示:该实体被设为"仅指定组可见",而你不在任何一个绑定组里。不是题目被删了,也不是账号出问题了,请联系管理员把你加入对应组即可。 - 列表页不会报错,只是看不到那些实体(静默过滤、不暴露存在性),所以"某道题突然不见了"通常就是这个原因。
- 同一套判定也作用于提交、题解、讨论、AI 提示、收藏、词云与排行榜:不在组里时这些入口同样打不开。
- 未登录的匿名访客只能看到
public的实体。
在题目描述、文章、个人简介、公告等所有支持 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 分钟有效,点击图片可刷新。开关见 配置说明。
NoldOJ · Windows 在线评测系统 · MIT License