基于角色的权限控制模型RBAC

11 篇文章 2 订阅
RBAC权限模型是一种常见的用户权限管理方式,它将用户、角色和权限三者关联。用户通过角色获取权限,角色是具有相同权限的用户集合。 RBAC模型从用户与权限直接关联演进到用户拥有多个角色,解决了权限分配和回收的复杂性。权限包括页面访问和操作权限,数据权限则涉及用户能访问的数据范围,通常需要通过定制SQL实现。
摘要由CSDN通过智能技术生成

我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问、操作、数据权限。形成理论的权限控制模型有:自主访问控制(DAC:Discretionary Access Control)、强制访问控制(MAC:Mandatory Access Control)、基于属性的权限验证(ABAC:Attributed-Based Access Control)等。最常被开发者使用也是相对易用、通用的就是RBAC权限模型(Role-Based Access Control),本文就将向大家介绍该权限模型

一、RBAC权限模型简介

RBAC权限模型(Role-Based Access Control)即:基于角色的权限控制。模型中有几个关键的术语:

  • 用户:系统接口及访问的操作者
  • 权限:能够访问某接口或者做某操作的授权资格
  • 角色:具有一类相同操作权限的用户的总称

RBAC权限模型核心授权逻辑如下:

  • 某用户是什么角色?
  • 某角色具有什么权限?
  • 通过角色的权限推导用户的权限

二、RBAC的演化进程

2.1.用户与权限直接关联

在这里插入图片描述
想到权限控制,人们最先想到的一定是用户与权限直接关联的模式,简单地说就是:某个用户具有某些权限。如图:

  • 张三具有创建厂商和删除厂商的权限,所以他有可能是运营人员;
  • 李四具有创建、修改、查询、删除科室的权限,所以他有可能是HIS自建用户。
    这种模型能够清晰的表达用户与权限之间的关系,足够简单。但同时也存在问题。
  • 现在用户是张三、李四,以后随着人员增加,每一个用户都需要重新授权
  • 或者张三、李四离职,需要针对每一个用户进行多种权限的回收
2.2.一个用户拥有多个角色

在实际的团体业务中,都可以将用户分类。比如对于薪水管理系统,通常按照级别分类:经理、高级工程师、中级工程师、初级工程师。也就是按照一定的角色分类,通常具有同一角色的用户具有相同的权限。这样改变之后,就可以将针对用户赋权转换为针对角色赋权。
在这里插入图片描述

  • 一个用户有一个角色
  • 一个角色有多个操作(菜单)权限
  • 一个操作权限可以属于多个角色
2.3 一个用户一个或多个角色

但是在实际的应用系统中,一个用户一个角色远远满足不了需求。如果我们希望一个用户即担任运营人员,又是his自建用户。该怎么做呢?为了增加系统设计的适用性,我们通常设计:

  • 一个用户有一个或多个角色;
  • 一个角色包含多个用户;
  • 一个角色有多种权限;
  • 一个权限具有多个角色。

通常我们会设计5张表:

  • 三张实体表;(用户、角色、权限)
  • 两张关系表;(用户角色关系表,角色权限关系表)
    在这里插入图片描述

三、页面访问权限与操作权限

  • 页面访问权限:所有系统都是由一个个的页面组成,页面再组成模块,用户是否能看到这个页面的菜单、是否能进入这个页面就称为页面访问权限。
  • 操作权限:用户在操作系统中的任何动作、交互都需要有操作权限,如增删改查等。比如:某个按钮,某个超链接用户是否可以点击,是否应该看见的权限。

为了适应这种需求,我们可以把页面资源(菜单)和操作资源(按钮)分表存放,如上图。也可以把二者放到一个表里面存放,用一个字段进行标志区分

四、数据权限

数据权限比较好理解,就是某个用户能够访问和操作哪些数据。

  • 通常来说,数据权限有用户所属的组织来确定。比如:生产一部只能看自己部门的生产数据,生产二部只能看自己部门的生产数据;销售部门只能看销售数据,不能看财务部门的数据。而公司的总经理可以看所有的数据。
  • 在实际的业务系统中,数据权限往往更加复杂。非常有可能销售部门可以看生产部门的数据,以确定销售策略、安排计划等。

所以为了面对复杂的需求,数据权限的控制通常是由程序员书写个性化的SQL来限制数据范围的,而不是交给权限模型或者Spring Security来控制。当然也可以从权限模型或者权限框架的角度去解决这个问题,但适用性有限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值