权限管理——RBAC应用

一、权限管理的访问控制

       权限管理,一般指控制用户的访问权限,使得用户可以访问而且只能访问自己被授权的资源,不能多也不能少。现在的软件系统里基本上都用到了权限管理,只是控制的粒度、层面和侧重点会有所不同,比较完善的权限管理包括四个方面的访问控制:

      1.功能(最基础):以用户完成某一功能为准。如“添加用户”、“删除用户”

      2.数据:比功能访问权限的控制粒度更小,如“管理员可看到比一般用户更多的信息”

      3.时间:给访问权限添加时间控制,让访问的资源在某一时间段中可用。如”12306只能在7:00-23:00时间段内购票“

      4.空间:给访问权限添加空间控制,根据访问用户的空间位置不同,而对用户的访问资源进行限制。如”很多人都在问,为什么在中国上不了facebook……“

二、设计理念

      权限管理的设计理念有很多,像ABAC(基于属性的访问控制)、ACL(基于资源的访问控制)、RBAC(基于资源的访问控制)、GBAC(基于组的访问控制)等等,它们各有利弊,现在最常用的是RBAC,理论较完善。

1.基于资源的权限控制——ACL

      ACL(Access Control List)访问控制列表,是最早也是最基本的一种访问控制机制,它的权限控制是围绕”资源“展开的,即每一项资源,都配有一个列表,这个列表记录的是哪些用户可以对这些资源进行哪些操作


      这种访问控制非常简单,只要把用户和资源连接起来就行了,但是当用户和资源增多时,就会产生大量的访问权限列表,管理这些访问控制列表本身就是一件非常繁重的工作,这样便使得ACL在性能上无法胜任实际应用,所以说性能是硬伤。

2.基于角色的权限控制——RBAC

      RBAC(Role-Based Access Control)基于角色的访问控制,在这种访问控制机制中,引入了Role的概念,将用户与权限之间的关系进行了解耦,让用户通过角色与权限进行关联。在RBAC模型中,who、what、how构成了访问权限三元组,即”who对what进行how的操作“。

      一个用户可有多种角色,每一种角色拥有多个权限,在用户与角色、角色与权限之间,都是多对多的关系。通过给用户分配角色,使得用户拥有对系统的部分使用权限。在实际设计的过程中,可让角色和资源直接进行绑定,权限控制体现在角色与资源的关联上


      角色,是一定数量的权限集合,也可看成是对拥有相同角色的用户进行的分类。

3.引入”组“概念的权限控制——RBAC

      这种方案是比较简单的权限管理,一般情况下这样的设计已经足够了,但是如果要给一组用户直接分配权限的话就有问题了,所以又引入了用户组的概念。


      用户组,是一组用户的集合,一个用户组拥有多个权限。

      通过用户组的启发,其实我们也可以增加角色组、资源组等等各种组,实现相应的继承功能。不过这样就有点繁琐了,还是用的时候根据实际需求权衡吧。

三、基于RBAC的权限管理

      在上边的分析中,得出了一种包含用户、角色、资源、组等几个主体的权限管理,它们之间的关联都是多对多的,由此得到的ER图如下:


      RBAC权限管理模型在加入”组“概念后,在实现继承功能的基础上,更加灵活的适应了需求的变更。它主要的配置为:用户-角色配置、用户-用户组配置,角色-资源配置,用户组-资源配置,这些配置对应到数据库中就是两个主表之间的第三张表,里边存储的是用户操作的记录,服务于主表以供查询。


阅读更多

扫码向博主提问

xjCherie

非学,无以致疑;非问,无以广识
去开通我的Chat快问
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenyanmoting/article/details/49226727
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭