Worktile 权限着重讲了 RBAC(基于角色的权限控制方案)的设计与实现,本文基于 Wiki 页面权限选择的另一个主流权限设计的方案:ACL。
本文大致分为三部分:
-
1. ACL 介绍
-
2. 介绍我们的权限以及为什么选择它
-
3.设计实现
一、ACL 介绍
1. 什么是 ACL?
ACL:Access Control List,权限控制列表,是对文件以及目录的权限控制方案。大名鼎鼎的 Linux 权限系统,它就是 ACL 的典型案例,本人在开发过程中也受到了 Linux 权限设计的一些启发。
2. ACL 的使用场景
使用场景也可以换个问法:为什么要使用 ACL ?关于这个问题我们还以 Linux 作为案例:Linux 本身只提供了 Owner(所有者)、Group(用户组)、Others(其他成员),也就是说其他成员或用户组是无法指定更细粒度的权限。
为了更好的解释,我们来举个简单的例子(场景):
有 4 个成员有 A、B、C、D,其中 A、B、C 是开发组 G 的成员,A 成员创建了一个代码仓库并把团队开发的代码放置到该目录中,其中这些代码主要是关于 G 组的,与其他成员无关,所以 A 把文件目录设置了权限,权限是组内可读可写,其他人没有任何权限。
现在来分析一下各个角色,A 是仓库的 Owner,G 是 Group(含 B、C),D 是与该文件无关的成员,所以是 Others。现在入职了一个用户 E,因为 E 是新人,所以不想让 E 去操作代码,只允许他查看熟悉代码。
面对这种场景,试想一下如何给 E 成员设置对应权限呢?答案是 oh no,因为 E 既不能按照 G 组权限,也不能按照 Others 权限,更不能是 Owner!所以面对这种鸡肋的权限,ACL 就作为了其补充,ACL 可以支持针对某一个用户或某个用户组做独立的权限,完美解决了类似场景。
二、PingCode Wiki 权限架构
OK,了解了什么是 ACL 以及使用场景,我们来聊一下 Wiki 的权限架构,基本架构见下图。
1. 基础权限 RBAC——角色对应的权限
1.1 权限配置
1.2 查看权限
2. 页面权限 ACL——针对用户和用户组的权限
页面权限同样是作为 RBAC 的补充,更加细粒度的权限划分,即给某部分人或某部分用户组分配对应权限。
2.1 页面权限设置入口
右上角菜单——「更多-权限设置」
<