权限管理——RBAC应用

权限管理其实分两块:授权鉴权
对于功能权限来说,授权一般采用 RBAC 模型,把每个需要授权的功能定义成资源即可。鉴权也很简单,只需要在调用服务的时候进行就可以了,在网关、服务的拦截器或者控制器都可以进行鉴权。无非就是需要服务调用者提供 Token 或者别的可以表明用户身份的东西,然后鉴权模块根据服务调用者提供的身份信息去找这个用户是否有授权罢了。

一、权限管理的访问控制

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

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
来源:CSDN
原文:https://blog.csdn.net/wangjingna/article/details/49226727
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_33249452/article/details/90052572
今日推荐