RBAC与ACL权限设计的区别

RBAC:Role Based Access Control,翻译过来基本上就是基于角色的访问控制系统。

ACL:Access Control List,访问控制列表,是前几年盛行的一种权限设计,它的核心在于用户直接和权限挂钩。

RBAC的核心是用户只和角色关联,而角色代表对了权限,这样设 计的优势在于使得对用户而言,只需角色即可以,而某角色可以拥有各种各样的权限并可继承。ACL和RBAC相比缺点在于由于用户和权限直接挂钩,导致在授 予时的复杂性,虽然可以利用组来简化这个复杂性,但仍然会导致系统不好理解,而且在取出判断用户是否有该权限时比较的困难,一定程度上影响了效率。还是要根据系统的需求来设计,如果系统的角色比较固定并且调整不是很大RBAC就是一个很好的选择,如果对于系统中的用户都必须单独来分配权限,并且每个用户的权限基本都不一样,那这种系统的设计通过ACL来实现更为适合。

在当前PHP主流程的框架中都有关于RBAC和ACL的扩展,一般RBAC的数据表设计如下:

user (用户表)

role (用户分组表)

node (操作节点)

role_user (用户和用户分组的对应)

access (各个操作和用户组的对应)

关于ACL的使用发现Zend ACL还是一个比较好的模块,如果想具体了解可以搜索下,还是有不少实例的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注