ACL(ACL - Access control list), 又称访问控制列表,是使用以访问控制矩阵为基础的访问控制方法,每一个对象对应一个串列主体。访问控制表描述每一个对象各自的访问控制,并记录可对此对象进行访问的所有主体对对象的权限。
很多类型的系统都实现了 ACL, 例如:
- 文件系统 ACLs 参考 Unix 文件系统权限
- 网络 ACLs 路由器、交换机访问
- SQL 实现
就 Unix 文件系统而言, ACL 指的是文件的操作权限列表。ACL 指定拥有该对象访问权的用户或系统进程, 以及该对象上允许被执行的操作。每一个 ACL 入口均会指定一个主体和操作。例如, 某个文件的 ACL 包含 704
, 则赋予了文件的创建者对该文件的读写权限, 而其他人只能对该文件执行读操作。
知晓云的 ACL 机制沿用 Unix 的 ACL 设计思想,使用角色(创建者、用户组、登录用户、所有人(登录用户和未登录的匿名用户))和操作(读、写)的权限数字来进行描述。不用慌张,在实际使用中,你可以完全忽略这些看不懂的数字的存在,它们都被翻译成了管理面板上的操作选项和 SDK 里的方法,以供使用。
下面,我们将以一个具体的例子,来演示 ACL 在实际业务中如何发挥作用。
假设我们需要实现一个简易版朋友圈。
在这个场景里,有如下产品要求:
-
登录用户可以发表朋友圈
-
所有人都可以看其他人发表的朋友圈
-
只有创建者自己才能修改删除自己发的朋友圈
-
创建一个数据表,取名 “moments”
-
设置数据表的 ACL 权限如下:
设置数据表的 ACL
在 ACL 的设置中,我们对数据表的权限和数据行的权限进行了区分,其中,数据表控制添加数据的权限;数据行控制读取和修改删除的权限。
在上面的例子中,将 “数据表录入权限” 设置为 “登录用户”,使得任何登录了的用户都可以向数据表里添加新数据,也即,登录用户都可以发表朋友圈; 将 ”行的默认读写权限“ 设置为 “所有人可读”、“创建者可写”,使得数据行默认可以被任何人(登录的或者未登录的)读取,而这条数据只能被它的创建者修改或者删除。