RBAC-基于⾓⾊权限的访问控制和基于资源的权限访问控制
RBAC-基于⾓⾊权限的访问控制
我们开发⼀个系统,必然⾯临权限控制的问题,即不同的⽤户具有不同的访问、操作、数据权限。形成理论的权限控制模型有:⾃主访问控制(DAC:
Discretionary Access Control)、强制访问控制(MAC: Mandatory Access母亲节红包发多少
Control)、基于属性的权限验证(ABAC: Attribute-Based Access
Control)等。最常被开发者使⽤也是相对易⽤、通⽤的就是RBAC权限模型(Role-Based Access
Control),本⽂就将向⼤家介绍该权限模型。
什么电视⼀、RBAC权限模型简介
RBAC权限模型(Role-Based Access Control)即:基于⾓⾊的权限控制。模型中有⼏个关键的术语:
⽤户:系统接⼝及访问的操作者
权限:能够访问某接⼝或者做某操作的授权资格
⾓⾊:具有⼀类相同操作权限的⽤户的总称
RBAC权限模型核⼼授权逻辑如下:
某⽤户是什么⾓⾊? 你是谁
某⾓⾊具有什么权限? 你可以⼲什么
通过⾓⾊的权限推导⽤户的权限,满⾜三个原则 即最⼩责任原则,责任分离原则和数据抽象原则。
⼆、RBAC的演化进程
⽤户与权限直接关联
⽤户与权限直接关联
想到权限控制,⼈们最先想到的⼀定是⽤户与权限直接关联的模式,简单地说就是:某个⽤户具有某些权限。如图:
1. 张三具有创建⽤户和删除⽤户的权限,所以他可能系统维护⼈员
2. 李四具有产品记录管理和销售记录管理权限,所以他可能是⼀个业务销售⼈员
这种模型能够清晰的表达⽤户与权限之间的关系,⾜够简单。但同时也存在问题:
家里装修定制衣柜1. 现在⽤户是张三、李四,以后随着⼈员增加,每⼀个⽤户都需要重新授权
2. 或者张三、李四离职,需要针对每⼀个⽤户进⾏多种权限的回收最新小麦价格行情
⼀个⽤户拥有⼀个⾓⾊
在实际的团体业务中,都可以将⽤户分类。⽐如对于薪⽔管理系统,通常按照级别分类:经理、⾼级⼯程师、中级⼯程师、初级⼯程师。也就是按照⼀定的⾓⾊分类,通常具有同⼀⾓⾊的⽤户具有相同的权限。这样改变之后,就可以将针对⽤户赋权转换为针对⾓⾊赋权。
佘诗曼的老公是谁
⼀个⽤户拥有⼀个⾓⾊
⼀个⽤户有⼀个⾓⾊
⼀个⾓⾊有多个操作(菜单)权限
⼀个操作权限可以属于多个⾓⾊
我们可以⽤下图中的数据库设计模型,描述这样的关系
三页⾯访问权限与操作权限
页⾯访问权限:所有系统都是由⼀个个的页⾯组成,页⾯再组成模块,⽤户是否能看到这个页⾯的菜单、是否能进⼊这个页⾯就称为页⾯访问权限。
操作权限:⽤户在操作系统中的任何动作、交互都需要有操作权限,如增删改查等。⽐如:某个按钮,某个超链接⽤户是否可以点击,是否应该看见的权限。
四、数据权限
数据权限⽐较好理解,就是某个⽤户能够访问和操作哪些数据。
通常来说,数据权限由⽤户所属的组织来确定。⽐如:⽣产⼀部只能看⾃⼰部门的⽣产数据,⽣产⼆部只能看⾃⼰部门的⽣产数据;销售部门只能看销售数据,不能看财务部门的数据。⽽公司的总经理可以看所有的数据。
在实际的业务系统中,数据权限往往更加复杂。⾮常有可能销售部门可以看⽣产部门的数据,以确定销售策略、安排计划等。
所以为了⾯对复杂的需求,数据权限的控制通常是由程序员书写个性化的SQL来限制数据范围的,⽽不是交给权限模型或者Spring Security或shiro来控制。当然也可以从权限模型或者权限框架的⾓度去解决这个问题,但适⽤性有限。
基于资源的权限访问控制RBAC(resource-based access control)
是以资源为中⼼进⾏的访问控制,只需要为⾓⾊添加权限就可以
区别
1. 由于基于⾓⾊的权限访问控制的⾓⾊与权限往往是多对多的关系(⽐如admin⾓⾊可以所有CURD的权限,部门经理⾓⾊有Retrieve
权限,这就是多对多关系了),如果⾓⾊所对应的权限发⽣变化,那我们所编写的判断逻辑就必须发⽣改变,可扩展性差
京东购物流程2. 如果是基于资源的权限访问控制,资源和权限⼀对⼀关系⽐较常见,很多时候资源和权限在数据库中会被合并在⼀张表中,只需要为
资源分配相应的权限。所以⼀个具体操作对应的权限,只要直接判断⽤户是否拥有该权限即可,可扩展性强
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论