HydroOJ 从入门到入土(3)权限管理
管理OJ 就是管理资源, 管理资源就是管理权限.
HydroOJ 的用户权限使用位运算, 所以看起来比较奇怪.
权限管理分两块: 系统权限和域权限, 这两个是分开的.
1. 系统权限 (控制面板->用户权限)
- 装完系统设置好超级管理员之后, 该用户自动 root 权限(所有权限).
- guest 是未注册用户的权限, 一般只有一个注册的权限, 如果关闭, 则关闭注册功能.
- Default Privilege 是注册用户权限, 建议关闭
文件权限
,发送站内信
和创建域
的权限. - 可以挑选用户, 指定各类权限.
具体权限可以参考源代码第 236-263 行.
解释不一定准确, 仅供参考, 全部整理如下:
权限(英文) | 值 | 解释 |
---|---|---|
PRIV_NONE | 0 | 没有任何权限, 包括注册, 等价于拉黑 |
PRIV_MOD_BADGE | 1 << 25 | 修改徽章的权限, 但是修改徽章最好装个插件 |
PRIV_EDIT_SYSTEM | 1 << 0 | 编辑系统, 应该是使用控制面板的权限 |
PRIV_SET_PERM | 1 << 1 | 设置权限, 看源代码这个 PERM 应该是域权限 |
PRIV_USER_PROFILE | 1 << 2 | 查看个人档案, 也是访问大多数页面的必要权限 |
PRIV_REGISTER_USER | 1 << 3 | 注册, 关闭之后相当于关闭注册功能 |
PRIV_READ_PROBLEM_DATA | 1 << 4 | 读取题目数据 |
PRIV_READ_RECORD_CODE | 1 << 7 | 读取记录代码 |
PRIV_VIEW_HIDDEN_RECORD | 1 << 8 | 查看隐藏记录 |
PRIV_JUDGE | 1 << 9 | 评测, 远程评测机可以用开了此权限的账号登录 |
PRIV_CREATE_DOMAIN | 1 << 10 | 创建域 |
PRIV_VIEW_ALL_DOMAIN | 1 << 11 | 查看所有域 |
PRIV_MANAGE_ALL_DOMAIN | 1 << 12 | 管理所有域 |
PRIV_REJUDGE | 1 << 13 | 重新评测 |
PRIV_VIEW_USER_SECRET | 1 << 14 | 查看邮箱等信息(已弃用) |
PRIV_VIEW_JUDGE_STATISTICS | 1 << 15 | 查看评测统计信息 |
PRIV_UNLIMITED_ACCESS | 1 << 22 | 无限制访问, 可以查看隐藏题目, 各种作业等等 |
PRIV_VIEW_SYSTEM_NOTIFICATION | 1 << 23 | 查看系统通知 |
PRIV_SEND_MESSAGE | 1 << 24 | 发送站内消息 |
PRIV_CREATE_FILE | 1 << 16 | 创建文件, 目前没有上传限制, 建议关闭 |
PRIV_UNLIMITED_QUOTA | 1 << 17 | 无限文件存储数量和大小 |
PRIV_DELETE_FILE | 1 << 18 | 删除文件 |
PRIV_ALL | -1 | 所有权限 |
2. 域权限 (管理域->管理权限)
- 默认域是 system 域, 超级管理员自动 root 权限(所有权限).
- guest 是未注册用户的权限, 如果不希望未注册用户查看, 可以关闭
查看此域
的权限. - default 是注册用户权限, 一般不用动, 按需修改, 如果管理员较少, 建议关闭写题解功能.
- 如需自定义组别, 可以先在
管理角色
中新建一个用户组, 如管理员
, 然后在管理用户
当中选定部分用户加入管理员
用户组, 之后可以再管理权限中指定管理员
的各类权限.
具体权限可以参考源代码第 10-100 行.
解释不一定准确, 仅供参考, 全部整理如下:
权限(英文) | 值 | 解释 |
---|---|---|
PERM_NONE | 0n | |
// Domain Settings | ||
PERM_VIEW | 1n << 0n | 查看此域 |
PERM_EDIT_DOMAIN | 1n << 1n | 编辑域设置 |
PREM_VIEW_DISPLAYNAME | 1n << 67n | 显示域中用户的显示名 |
PERM_MOD_BADGE | 1n << 2n | 展示 MOD 徽章 |
// Problem | ||
PERM_CREATE_PROBLEM | 1n << 4n | 创建题目 |
PERM_EDIT_PROBLEM | 1n << 5n | 修改题目 |
PERM_EDIT_PROBLEM_SELF | 1n << 6n | 修改自己的题目 |
PERM_VIEW_PROBLEM | 1n << 7n | 查看题目 |
PERM_VIEW_PROBLEM_HIDDEN | 1n << 8n | 查看隐藏的题目 |
PERM_SUBMIT_PROBLEM | 1n << 9n | 递交题目 |
PERM_READ_PROBLEM_DATA | 1n << 10n | 读取题目数据 |
// Record | ||
PERM_READ_RECORD_CODE | 1n << 12n | 读取记录的代码 |
PERM_READ_RECORD_CODE_ACCEPT | 1n << 66n | 题目通过后读取记录的代码 |
PERM_REJUDGE_PROBLEM | 1n << 13n | 重测题目 |
PERM_REJUDGE | 1n << 14n | 重测记录 |
// Problem Solution | ||
PERM_VIEW_PROBLEM_SOLUTION | 1n << 15n | 查看题解 |
PERM_VIEW_PROBLEM_SOLUTION_ACCEPT | 1n << 65n | 题目通过后查看题解 |
PERM_CREATE_PROBLEM_SOLUTION | 1n << 16n | 创建题解 |
PERM_VOTE_PROBLEM_SOLUTION | 1n << 17n | 为题解投票 |
PERM_EDIT_PROBLEM_SOLUTION | 1n << 18n | 修改题解 |
PERM_EDIT_PROBLEM_SOLUTION_SELF | 1n << 19n | 修改自己的题解 |
PERM_DELETE_PROBLEM_SOLUTION | 1n << 20n | 删除题解 |
PERM_DELETE_PROBLEM_SOLUTION_SELF | 1n << 21n | 删除自己的题解 |
PERM_REPLY_PROBLEM_SOLUTION | 1n << 22n | 回复题解 |
PERM_EDIT_PROBLEM_SOLUTION_REPLY_SELF | 1n << 24n | 修改题解中自己的回复 |
PERM_DELETE_PROBLEM_SOLUTION_REPLY | 1n << 25n | 删除题解的回复 |
PERM_DELETE_PROBLEM_SOLUTION_REPLY_SELF | 1n << 26n | 删除题解中自己的回复 |
// Discussion | ||
PERM_VIEW_DISCUSSION | 1n << 27n | 查看讨论 |
PERM_CREATE_DISCUSSION | 1n << 28n | 创建讨论 |
PERM_HIGHLIGHT_DISCUSSION | 1n << 29n | 高亮讨论 |
PERM_PIN_DISCUSSION | 1n << 61n | 置顶讨论 |
PERM_EDIT_DISCUSSION | 1n << 30n | 修改讨论 |
PERM_EDIT_DISCUSSION_SELF | 1n << 31n | 修改自己的讨论 |
PERM_DELETE_DISCUSSION | 1n << 32n | 删除讨论 |
PERM_DELETE_DISCUSSION_SELF | 1n << 33n | 删除自己的讨论 |
PERM_REPLY_DISCUSSION | 1n << 34n | 回复讨论 |
PERM_ADD_REACTION | 1n << 62n | React to discussion |
PERM_EDIT_DISCUSSION_REPLY_SELF | 1n << 36n | 修改讨论中自己的回复 |
PERM_DELETE_DISCUSSION_REPLY | 1n << 38n | 删除讨论回复 |
PERM_DELETE_DISCUSSION_REPLY_SELF | 1n << 39n | 删除讨论中自己的回复 |
PERM_DELETE_DISCUSSION_ REPLY_SELF_DISCUSSION |
1n << 40n | 删除自己讨论中的回复 |
PERM_LOCK_DISCUSSION | 1n << 64n | 锁定讨论 |
// Contest | ||
PERM_VIEW_CONTEST | 1n << 41n | 查看比赛 |
PERM_VIEW_CONTEST_SCOREBOARD | 1n << 42n | 查看比赛成绩表 |
PERM_VIEW_CONTEST_HIDDEN_SCOREBOARD | 1n << 43n | 查看隐藏的比赛 递交状态和成绩表 |
PERM_CREATE_CONTEST | 1n << 44n | 创建比赛 |
PERM_ATTEND_CONTEST | 1n << 45n | 参加比赛 |
PERM_EDIT_CONTEST | 1n << 50n | 修改任意的比赛 |
PERM_EDIT_CONTEST_SELF | 1n << 51n | 修改自己的比赛 |
PERM_VIEW_HIDDEN_CONTEST | 1n << 68n | 查看所有比赛 |
// Homework | ||
PERM_VIEW_HOMEWORK | 1n << 52n | 查看作业 |
PERM_VIEW_HOMEWORK_SCOREBOARD | 1n << 53n | 查看作业成绩表 |
PERM_VIEW_HOMEWORK_ HIDDEN_SCOREBOARD |
1n << 54n | 查看隐藏的作业 递交状态和成绩表 |
PERM_CREATE_HOMEWORK | 1n << 55n | 创建作业 |
PERM_ATTEND_HOMEWORK | 1n << 56n | 认领作业 |
PERM_EDIT_HOMEWORK | 1n << 57n | 修改任意的作业 |
PERM_EDIT_HOMEWORK_SELF | 1n << 58n | 修改自己的作业 |
PERM_VIEW_HIDDEN_HOMEWORK | 1n << 69n | 查看所有作业 |
// Training | ||
PERM_VIEW_TRAINING | 1n << 46n | 查看训练计划 |
PERM_CREATE_TRAINING | 1n << 47n | 创建训练计划 |
PERM_EDIT_TRAINING | 1n << 48n | 修改训练计划 |
PERM_PIN_TRAINING | 1n << 63n | 置顶训练计划 |
PERM_EDIT_TRAINING_SELF | 1n << 49n | 修改自己的训练计划 |
// Ranking | ||
PERM_VIEW_RANKING | 1n << 59n | 查看排名 |
// Placeholder | ||
PERM_ALL | -1n | |
PERM_BASIC | 0n | |
PERM_DEFAULT | 0n | |
PERM_ADMIN | -1n | |
PERM_NEVER | 1n << 60n |
总结
优先处理控制面板中的权限, 这个权限对所有域生效.
处理域权限的时候, 可以新建几个用户组, 细化管理