HydroOJ 从入门到入土(11) 管理域-设置详解

发布时间 2023-12-22 13:31:18作者: Bowen404

域权限相对于系统权限, 更加细致. 功能上能玩出的花样更多, 但有些设置可能会带来较高的潜在风险, 小心处理.

管理域功能中, 主要有属性访问控制两大类.

一. 属性

1. 管理域

管理域标签中, 是 2 块域信息显示面板.

  • 上边是首页的公告板
    • 公告板由控制面板中的 bulletin: true 控制是否显示, 在编辑域资料公告里修改.
  • 下边是信息栏
    • 头像在编辑域资料avatar里修改.
    • 名称在编辑域资料名称里修改.
    • 所有者, 如果是默认的域(system), 则为1号用户, 其他的为创建者. 如需修改 1 号用户信息, 需要进数据库修改.
      • 注意⚠️, 不要试图通过管理员的切换账户功能进入 1 号用户, 因为此用户默认没有人权(PRIV_USER_PROFILE), 所以会反复提示未登录. 如果出现, 可以在域名后手动输入 /login进入登陆界面重新登陆.
      • 如果不想进入数据库, 就想用管理员修改1号账户的头像, 可以先在控制面板中给 1号用户人权, 然后再切换, 再改头像. 记得修改完在把权限撤销. 此方法仅限于改头像.
    • 初始化讨论结点
      • 注意⚠️, 国内对内容管理是零容忍态度, 建议没有 7x24h 审核能力的公开 oj, 不要开启讨论板块. 参考博客园21 年因为多年前的内容被罚几十万的故事.
      • 讨论结点类似于 tag 或者分类, 或者板块, 不初始化无法使用讨论功能.
      • 讨论节点在控制面板-系统设置-discussion.nodes里边设置.

2. 编辑域资料

  • 名称

  • avatar:

    • 支持 Gravatar.
    • 如需使用自定义图片, 可以用url: /xxx.png的方法实现. 这个/对应的是 /root/.hydro/static 文件夹, 或者是任意插件的public目录(执行插件时自动复制 public所有文件到static).
  • 允许引用该域题目的域(* 表示所有域均允许):

    • 哪些域可以从这个域复制题目, 一般就填 * 就行.
  • 公告:

    • 这里虽然使用了Markdown, 但是不是所有的语法都支持. 同时, 出于安全考虑, 使用了safe白名单防止 xss 攻击.

      • 可用的 html 标签和属性值看这里.
      • 可用的 css 属性看这里.
      • 总结一下, 就是基本只能改文字大小 / 颜色 / 字体 / 对齐, 改变图片尺寸, div 指定一下 id / class.
    • 如需分栏显示, 可以使用以下代码:

      <div class="row">
      <div class="medium-6 columns">
      
      ```
      aaa
      ```
      </div><div class="medium-6 columns">
      
      ```
      output
      ```
      
      </div></div>
      
  • 域内允许使用的提交语言:

    • 如果用不到那么多的小众语言, 可以设置的简单点, 比如C++14, C++14(O2), Python, Java等, 减少选择切换时的眼花缭乱.

3. 加域申请

  • 对于默认的域(system), 注册的用户会自动进入该域, 成为default权限的用户, 不需要手动添加. 所以要管理默认用户权限, 只需要去管理权限里修改default组的权限即可.
  • 对于其他用户创建的域, 有以下 4 种设置: 方法, 角色分配, 过期, 邀请码. 以下详细说明.

3.1 方法:

  • 没有用户可以自助加入此域:
    • 注意, 这是一个比较迷惑的说法. 事实上, 所有在 oj 注册了的用户, 在任何域都是 default 权限. 所有未登录用户, 都是 guest 权限.
    • 所以针对注册用户, 希望将此域改为私有的话, 需要先将default的用户权限改为不能查看此域, 这里才会有用.
    • 需要配合下边的角色分配使用, 给加入域的用户一些不同于default注册用户的权限, 这个设置才有意义.
  • 任意用户都可以加入此域:
    • 跟刚才的类似, 需要配合下边的角色分配使用, 控制权限.
  • 任意用户都可以通过邀请码加入此域:
    • 配合较为封闭的适用场景, 可以减少大量人工审核工作.

3.2 角色分配

加入之后自动获得的身份.

前置: 需要先在管理角色中添加好角色, 并在管理权限中设置好相应角色权限.

3.3 过期

安全性设置. 以保存设置时刻为基准, 过期后,用户将不能加入此域。

3.4 邀请码

配合方法 3 使用. 平衡安全性和管理成本.

二. 访问控制

1. 管理角色

  • 内置了 3 种角色guest, default, root, 分别对应于未登录用户, 已登录用户, 域管理员用户. 这三个角色都不可删除.

  • 右上角可以点击创建角色, 会显示用户定义的角色: xxx, 可以删除.

  • 新创建的角色默认跟default的权限一样, 可以随后在管理权限中修改.

  • 旁边的用户, 指的是用户数量, 不是用户uid

2. 管理用户

  • 需要手动一个一个添加并设置权限.
  • 在右侧角色的下拉列表中, 更改角色之后会直接生效, 不需要点保存.
  • 如果将某个角色设置成default权限, 则相当于将所选用户移出, 即时生效, 刷新后能看到效果.
  • 如果多选, 可以批量修改权限.
  • 总结: 用户角色设置主要面向各种不同级别的管理员, 或者特殊的比赛场景等等. 普通用户的设置应该去设置default权限.

3. 管理权限

用户组:

  • root 默认拥有所有权限, 不可更改
  • guest 默认只有查看权限. 如果希望此域登录后查看, 可以关闭guest用户的查看此域权限.
  • default 默认用户权限, 相对合理, 不太需要修改. 如果希望此域成为私有域, 可以关闭default用户的查看此域权限. 并使用.
  • 其他用户组: 配合加域申请管理用户使用.

具体权限:

大部分的权限顾名思义, 不再解释, 列几个不好理解的权限.

权限 解释
显示域中用户的显示名 普通用户可以设置在此域中的显示名, 相当于备注名, 如果具有此权限, 会以括号的形式显示在用户名后边.
展示 MOD 徽章 如果设置了自定义用户标签, 或者安装了插件徽章管理页面插件, 需要勾选显示
读取题目数据 可以直接下载题目数据的权限, 危险设置!!!
读取记录的代码 和下边的通过后...都指的是读取别人的代码的权限
创建题解 注意定期检查是否有不合适的内容
查看讨论 上边解释过, 可以直接把这个选项关掉, 用户界面的上方导航栏将不会出现讨论这个板块.
查看隐藏的比赛/作业递交状态和成绩表 比赛和作业并没有隐藏选项, 这里应该指的是没有分配给自己的比赛或者作业. (可能)
查看所有比赛/作业 除了上边隐藏的(没有分配), 应该还包括需要邀请码的. (可能)

4. 管理小组

  • 创建好后, 名称不可在网页端修改, 需要进入数据库修改.

  • 布置好后, 可以将作业或者比赛分配给指定组, 别人就看不到了, 相当于班级管理.

  • 作业或者比赛分配组的时候, 需要打字输入, 不会弹出选项, 也不会进行校验, 所以这里可以设置的简单点, 不然打错会导致目标组员无法看到.

  • 创建用户时, 可以设置用户组, 也就是group属性, 就是这个组, 是一次性设置一批, 不是追加. 如果新建用户是设置了group属性, 原有的组员会被清空, 请谨慎设置. 顺便, 创建用户时, 无法设置域角色(注册时批量设置域角色的场景: 组织临时比赛可能会需要批量注册参赛人, 而且希望参赛人都只有受限的权限).