Appearance
后台管理指南
文档状态:部署运维方案尚未成熟
本分区文档描述的是开发期部署与运维方式(手动分步启动、开发期脚本),尚未提供面向生产的一键部署方案——当前不具备守护进程管理、TLS、备份、升级等生产级能力,生产部署请谨慎参考。项目后续将提供成熟的一键部署方式,届时本文档将整体更新。
管理后台面向 admin 角色,前端入口为「管理」页面(/admin),所有管理端点位于 /api/v1/admin/* 并强制校验管理员权限。
概览
后台按功能区分为以下页面:
| 页面 | 功能 |
|---|---|
| 用户 | 用户列表、编辑资料、分配角色、封禁 / 解封 |
| 角色与权限 | RBAC 角色、权限点管理 |
| 题目 | 题目列表、创建 / 编辑 / 删除(含 U 型与 P 型) |
| 分类 | 题目分类的父子层级管理 |
| 提交 | 查看全部提交、删除提交、重测(rejudge) |
| 竞赛 | 竞赛 CRUD 与参赛者管理 |
| 评测镜像 | 评测镜像白名单维护 |
| 黑名单 | IP 黑名单管理 |
| 审计日志 | 操作审计记录查询 |
| 系统设置 | 运行时可改的系统配置 |
| 仪表盘 | 运行统计概览 |
RBAC 角色与权限
Neuro OJ 使用「角色 → 权限点」模型:权限格式为 resource:action(例如 problem:create、submission:read_own)。
- 系统内置角色:
root(UID=0 系统用户,不计入统计)、admin(管理后台)、user(普通用户默认权限集)。 - 管理页「角色」可以创建自定义角色、编辑角色的权限点集合、删除不再使用的角色。
- 用户的角色在「用户」页面通过「分配角色」调整。
- 权限检查在服务端强制进行,前端菜单只是展示层。
安全约束
系统禁止降级最后一个可登录管理员——若当前只剩一个 admin,不能移除其管理角色,防止后台失守。
用户管理
- 编辑资料:修改用户昵称、邮箱等基础信息。
- 封禁 / 解封:封禁需填写原因,可设置封禁时长(临时封禁);被封禁用户登录时会看到原因与解封时间。封禁历史可在该用户详情中查看。
- IP 黑名单:在黑名单页添加 / 移除 IP,黑名单内的来源会被拒绝访问。生产环境配合
TRUSTED_PROXIES使用,否则所有请求都来自反向代理的 IP。
审计日志
- 敏感操作(登录、封禁、角色变更、设置修改、删除等)会写入审计日志,可在「审计日志」页按操作类型与时间范围查询。
- 保留时长由
AUDIT_LOG_RETENTION_DAYS控制(默认 90 天;设为 0 表示禁用清理)。 - 审计写入失败不影响业务主流程(仅记录错误日志)。
系统设置
运行时可改的系统配置以键值对形式存在「系统设置」页,包括但不限于:
| 键 | 说明 |
|---|---|
allow_register | 是否开放自助注册 |
jwt_expires_in | 登录令牌有效期 |
maintenance_mode | 维护模式开关 |
homepage_banner | 首页横幅内容 |
email_provider 及邮件相关键 | 邮件服务配置 |
rate_limit_* | 登录限流参数 |
修改即时生效;涉及邮件、限流等键时请先确认新值正确,避免锁死服务。
题目与分类
- 题目类型:U 型(用户题,创建者本人与 admin 可管理)与 P 型(主题题,仅 admin 管理)。admin 可创建任意类型。
- 创建 / 编辑:在管理页填写题面、限制条件、语言与运行时配置,并上传统一题目包 zip(见出题人文档)。
- 重测:题目或单条提交支持 rejudge(仅已完成或出错的提交可重测),用于修正题目配置或评测环境后的批量重判。
- 分类:分类支持父子层级,题目与分类为多对多关系。
- 评测镜像:白名单登记 evaluator / solution 镜像名与匹配模式;新增镜像后需在 Judge Worker 侧构建并重启使其生效。
提交管理
- 管理员可以查看任意用户的提交详情(含代码与用例级结果)。
- 可以删除异常提交,或对单条提交触发 rejudge。
仪表盘
「仪表盘」页提供运行统计概览(用户数、提交数、评测负载等),用于快速了解系统健康状况。