一般来说,我们在设计与人有交互的系统时,如果涉及到多用户能对同类资源进行操作的时候,就会有区分权限的需求了。
ACL(Access Control List)
ACL
是最早也是最基本的一种访问控制机制,
它的原理非常简单:每一项资源,都配有一个列表,这个列表记录的就是哪些用户可以对这项资源执行CRUD
中的那些操作。
当系统试图访问这项资源时,会首先检查这个列表中是否有关于当前用户的访问权限,从而确定当前用户可否执行相应的操作。
如:
1 | Alice -> read:article, update:article |
通过ACL表,我们可以很容易的使用程序判断出用户的权限。我们在设计RESTFUL
接口时,权限可以设计为:
1 | Alice -> GET /article, PUT /article |
ACL
缺点也是很明显的,首先需要维护大量的访问权限列表,它在性能上有明显的缺陷。
另外,对于拥有大量用户与众多资源的应用,管理访问控制列表本身就变成非常繁重的工作。