HydroOJ 从入门到入土(3)权限管理

发布时间 2023-12-06 20:53:34作者: Bowen404

管理OJ 就是管理资源, 管理资源就是管理权限.

HydroOJ 的用户权限使用位运算, 所以看起来比较奇怪.

权限管理分两块: 系统权限和域权限, 这两个是分开的.

1. 系统权限 (控制面板->用户权限)

  1. 装完系统设置好超级管理员之后, 该用户自动 root 权限(所有权限).
  2. guest 是未注册用户的权限, 一般只有一个注册的权限, 如果关闭, 则关闭注册功能.
  3. Default Privilege 是注册用户权限, 建议关闭 文件权限 , 发送站内信创建域 的权限.
  4. 可以挑选用户, 指定各类权限.

具体权限可以参考源代码第 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 查看用户 secret (?)
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. 域权限 (管理域->管理权限)

  1. 默认域是 system 域, 超级管理员自动 root 权限(所有权限).
  2. guest 是未注册用户的权限, 如果不希望未注册用户查看, 可以关闭 查看此域 的权限.
  3. default 是注册用户权限, 一般不用动, 按需修改, 如果管理员较少, 建议关闭写题解功能.
  4. 如需自定义组别, 可以先在 管理角色 中新建一个用户组, 如 管理员 , 然后在 管理用户 当中选定部分用户加入 管理员 用户组, 之后可以再管理权限中指定 管理员 的各类权限.

具体权限可以参考源代码第 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

总结

优先处理控制面板中的权限, 这个权限对所有域生效.

处理域权限的时候, 可以新建几个用户组, 细化管理