Skip to content

Commit

Permalink
add permission.md
Browse files Browse the repository at this point in the history
  • Loading branch information
undefined-moe committed Jan 5, 2024
1 parent 4aceefd commit ed95836
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 5 deletions.
1 change: 1 addition & 0 deletions .vuepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ export default defineUserConfig({
children: [
'/docs/user/',
'/docs/user/domain',
'/docs/user/permission',
'/docs/user/problem',
'/docs/user/testdata',
'/docs/user/problem-format',
Expand Down
2 changes: 2 additions & 0 deletions dev/PERM_PRIV.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ Hydro 的权限使用位运算处理。
例:若某用户具有 `PRIV_EDIT_SYSTEM``PRIV_SET_PERM` 权限,应设置为 `(1<<0)|(1<<1)` (即 3)

可以看 [代码](https://github.com/hydro-dev/Hydro/blob/master/packages/hydrooj/src/model/builtin.ts) 中关于此部分的内容。

扩展阅读:[权限结构](/docs/user/permission)
8 changes: 3 additions & 5 deletions dev/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@
- 系统要求:Hydro开发环境目前仅支持 Linux/Unix 系统,如您使用 Windows 请使用 WSL2 。
- MongoDB:Hydro 需要 [MongoDB](https://www.mongodb.com/try/download/community) 提供数据库服务。
- NodeJS:请安装 NodeJS >=18 版本。(若使用 apt 请使用 nodesource 提供的源替代官方源) (推荐使用 nix ,可通过`. <(curl https://hydro.ac/nix.sh)` 快速安装)
- yarn:安装 yarn 前请先完成 NodeJS 安装。 `npm install -g yarn`

尽管这不是必须的,但文档多数区域使用了 `npx` 工具来调用工作区的程序。如果此命令不存在,你可以在 **Hydro 项目文件夹外**使用 `yarn global add npx` 安装它。
- yarn:安装 yarn 前请先完成 NodeJS 安装。 `nix-env -iA nixpkgs.yarn``npm install -g yarn`

## 安装 Hydro

Expand All @@ -30,13 +28,13 @@ yarn build:ui:production # 编译前端
所有官方插件均随源码仓库下载到安装文件夹的 `packages` 子文件夹下,可以通过下面的命令启用官方插件(以启用 `@hydrooj/ui-default` 为例):

```sh
npx hydrooj addon add @hydrooj/ui-default
yarn hydrooj addon add @hydrooj/ui-default
```

对于非官方插件,下载后通过下面的命令启用即可(以启用位置在 `/root/addon` 下的插件为例):

```sh
npx hydrooj addon add /root/addon
yarn hydrooj addon add /root/addon
```

## 启动 Hydro
Expand Down
36 changes: 36 additions & 0 deletions docs/user/permission.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 权限系统

Hydro 的权限系统使用双层结构,分别为 Privilege (PRIV) 和 Permission (PERM)。
权限在系统内部使用位运算表示,具体的定义与数值可以查看 [源代码](https://github.com/hydro-dev/Hydro/blob/master/packages/hydrooj/src/model/builtin.ts)

## Privilege

Privilege 是用户在整套系统内拥有的权限,在所有域均生效。如创建用户,编辑系统设置,创建域,查看域等等。

特别地,`PRIV.PRIV_USER_PROFILE` 控制一个账号是否能够作为普通账号登录。若不具有此权限,该账号将无法登录(被封禁)。

## Permission

Permission 是用户在单个域内拥有的权限,如创建题目/比赛,发布/删除讨论等等。

如果 `PERM.PERM_VIEW` 被禁用,则该用户无法查看此域。

## 角色

通常我们需要给特定的一组用户分配相同的权限。在用户量较多的时候这会非常混乱难以管理,为此我们设计了【角色】。
角色是针对域内权限(PERM)的。在系统内置了三个角色:

- guest (对未登录用户生效,含已封禁用户)
- default (对所有未指定角色的用户生效,包括未加入域的用户)
- root (拥有所有权限)

通查情况下,如果需要对域做特殊的权限控制,应当新建一个用户组(例如 member)并将选定用户加入该用户组。
将角色移出域和将用户的角色设置为 default 是等价的。
若有需要,您也可以创建 teacher, admin 等其他角色。
考虑到系统中的用户可能非常多(数万甚至数十万),在用户列表中仅会显示权限不为 default 的用户。

## 加入域

加入域的过程实际上是**用户通过某种方式自助将自己的权限组由 default 变更到另一权限组(如member)**的过程。
因此在入域申请链接的权限组中选择 guest 和 default 是没有意义的。

0 comments on commit ed95836

Please sign in to comment.