fredshare / blog

护卫银河
https://fredshare.github.com/blog/
112 stars 23 forks source link

rbac与auth权限认证的区别 #36

Closed zhubobin closed 7 years ago

zhubobin commented 7 years ago

RBAC是基于角色的权限管理系统。 AUTH是基于节点的权限管理系统。 对于这两种权限管理的认识来自两个不同的系统,PHPCMS V9 与OneThink。 RBAC 可以将不同的用户分配给不同的用户组,即角色,每个角色享有不同的系统管理权限,但是如果角色之间的权限有交差时,可能会出现分工不明的情况,比如,有编 辑与管理员两个组,编辑要求对文章列表有添加与修改的权限,管理员对文章列表有添加与修改及删除操作,还可以进行文章分类的管理,但是如果发现在编辑里有 个主编,我想让他也可以删除文章,而又不想给他文章分类管理的权限,这时候用RBAC系统除了再建立一个用户组以外,没有其它方式,至少我没想到。 而 基于节点的权限管理AUTH就不会有这个问题,因为相对于所有用户来说,每个操作都是一个节点,我可以自由的分配每一个节点给每一个用户,但同时,也会出 现用户组不明确的问题,就是说,没有用户组,只有用户,当然这是原本的问题,其实AUTH也是可以先建立用户组,给用户组分配权限而后再将用户分配到相应 的组里,AUTH里还有个用户组明细表,就是用来对应用户跟组的关系,这样就解决了上边所说的问题,用户没有所在组。用户又可以同时属于不同的组,进而拥 有两个组组合的权限。 其实两种方式最根本的区别在于,RBAC中的用户只能属于一个组,AUTH中的用户可以属于不同的组,到于THINKPHP官网上这篇文章(http://www.thinkphp.cn/topic/4029.html)中说的condition的问题,在V9中也有data附件属性可以操作使用

RBAC中数据库的基本设计如下:

1、用户角色表role roleid tinyint(3) unsigned 主 INDEX rolename varchar(50) disabled tinyint(1) unsigned 1

2、管理员表admin adminid mediumint(6) unsigned 主 INDEX roleid tinyint(3) adminname varchar(20) INDEX password varchar(32) lastloginip varchar(15) lastlogintime int(10) unsigned realname varchar(50) email varchar(50) tel varchar(20)

3、管理员权限表admin_priv roleid tinyint(3) unsigned INDEX m char(20) INDEX c char(20) INDEX a char(20) INDEX data char(30) index AUTH中数据库的基本设计如下:

1、用户角色表role roleid tinyint(3) unsigned 主 INDEX rolename varchar(50) disabled tinyint(1) unsigned 1 rules varchar(500)

2、管理员表admin adminid mediumint(6) unsigned 主 INDEX adminname varchar(20) INDEX password varchar(32) lastloginip varchar(15) lastlogintime int(10) unsigned realname varchar(50) email varchar(50) tel varchar(20)

3、管理员权限表admin_priv roleid tinyint(3) unsigned INDEX m char(20) INDEX c char(20) INDEX a char(20) INDEX condition char(100) NOT NULL 4、用户组明细表group_access adminid mediumint(6) unsigned roleid tinyint(3) unsigned