最新消息:xilo的博客2016重新上线,感谢新老朋友的热情关注。

什么是RBAC (FLEA\Com\RBAC 文档)

开发 xilo 843浏览 0评论

部分内容翻译自wiki(en) by 锅巴GG(Gosber@Fleaphp)

1. 什么是RBAC(Role-Based Access Control)

在计算机系统安全领域,RBAC是一种限制授权用户进行系统访问的实现。它相对于以前的MAC(mandatory access control)以及Discretionary access control(DAC)较新也较流行,同时丰富了访问控制的实现方式。

在一个组织内部,角色(Roles)被指定为对其工作职能的抽象。具体的角色被授权获得一些许可(Permissions)。一种许可明确履行一个确定的操作。系统的用户(Users)被指定为明确的角色,通过获得用户拥有的角色列表,获取到各个角色拥有的授权的集合,从而明确一个用户所拥有的许可权限的总和。在明确被赋予不同角色的用户拥有了获得许可的权限列表之后,实现对不同用户在系统中不同功能(Function)执行的访问控制(Access Control)。
请留意RBAC区别于Context-Based Access Control (CBAC)的特点。

因为RBAC分离了用户与具体授权许可,所以在RBAC的设计中,用户所拥有的权限必须通过具体的角色集合来获得,所以使得我们可以抽象出不同的权限许可的描述,来轻松为每一个具体的用户指定不同的角色集合,从而赋予不同的用户最详细级别的授权的集合。

经过上述的描述,我们用一个简单的方向
System Function->Permission->Role->User

从这个方向,我们看出,我们设计的角度可以非常的清晰灵活。例如:

我假设bbs系统中有两种功能,编辑帖子和阅读帖子。
那么我们可以描述为:

System Function:
R. 阅读帖子
W. 编辑帖子

相应的权限用布尔值来表示:
SF       Permission  
R          R+ 能   (true)
R          R-  不能(false)
W         W+ 能   (true)
W         W-  不能(false)

然后我们分离出四种角色:
Roles:              
R1      只能阅读帖子
R1′     不能阅读帖子
R2      只能编辑帖子 ‘现实中很少用,但是其实是有实际意义的
R2′     不能编辑帖子

那么这些角色的授权许可,可以表示为:
Role                  Permission
R1                     R+
R1′                    R-
R2                     W+
R2′                    W-

权限的个数的排列组合可以得出实际能抽象出的角色的个数,然而实际访问控制的应用中,我们可能按系统的需要仅仅需要其中的几个组合方式:
例如:
Permission:          BBS应用中的角色
R-                        非注册用户R1’ (不能读帖子)
R+                       注册用户R1     (只能读帖子不能修改)
R+,W+                 管理员R1+R2        (用户同时具有两种角色,既能够读取,也能够修改)

*一般RBAC中要求角色明确具有的许可为有授权,其他情况都视为无授权。

可以看出,RBAC给予我们最大的灵活性来控制不同的功能的许可授权控制。所以即便我们一开始不考虑最终我们会独立出多少种角色,只要我们在
每个功能点的访问中实现检测访问的用户是否具有相应的权限,就可以达到访问控制的目的,例如(伪代码):
function ReadThread($ArticleID){
if (!CheckPermission($CurrentUser,$PermissionTokenArray)){
    Return;//无授权直接退出函数   
  }
}

function CheckPermission($CurrentUser,$PermissionTokenArray){
    //1.获得用户的所有的角色列表
    //2.获得用户拥有的角色所具有的授权许可列表
    //3.对比需要验证的$PermissionTokenArray中包含的授权,如果许可列表中未包含$PermissionTokenArray中的某一项内容,则返回false,否则返回true.
}

转载请注明:xilo blog » 什么是RBAC (FLEA\Com\RBAC 文档)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址