基于角色的权限控制模型RBAC图文教程

 更新时间:2022年03月16日 16:32:25   作者:字母哥哥  
这篇文章主要为大家介绍了基于角色的权限控制模型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的演化进程

2.1.用户与权限直接关联

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

file

  • 张三具有创建用户和删除用户的权限,所以他可能系统维护人员
  • 李四具有产品记录管理和销售记录管理权限,所以他可能是一个业务销售人员

这种模型能够清晰的表达用户与权限之间的关系,足够简单。但同时也存在问题:

现在用户是张三、李四,以后随着人员增加,每一个用户都需要重新授权

或者张三、李四离职,需要针对每一个用户进行多种权限的回收

2.2.一个用户拥有一个角色

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

file

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

我们可以用下图中的数据库设计模型,描述这样的关系。

file

2.3 一个用户一个或多个角色

但是在实际的应用系统中,一个用户一个角色远远满足不了需求。如果我们希望一个用户既担任销售角色、又暂时担任副总角色。该怎么做呢?为了增加系统设计的适用性,我们通常设计:

  • 一个用户有一个或多个角色
  • 一个角色包含多个用户
  • 一个角色有多种权限
  • 一个权限属于多个角色

我们可以用下图中的数据库设计模型,描述这样的关系。

file

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

页面访问权限: 所有系统都是由一个个的页面组成,页面再组成模块,用户是否能看到这个页面的菜单、是否能进入这个页面就称为页面访问权限。

操作权限: 用户在操作系统中的任何动作、交互都需要有操作权限,如增删改查等。比如:某个按钮,某个超链接用户是否可以点击,是否应该看见的权限。

file

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

四、数据权限

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

通常来说,数据权限由用户所属的组织来确定。比如:生产一部只能看自己部门的生产数据,生产二部只能看自己部门的生产数据;销售部门只能看销售数据,不能看财务部门的数据。而公司的总经理可以看所有的数据。

在实际的业务系统中,数据权限往往更加复杂。非常有可能销售部门可以看生产部门的数据,以确定销售策略、安排计划等。

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

以上就是基于角色的权限控制模型RBAC图文教程的详细内容,更多关于角色的权限控制模型RBAC的资料请关注脚本之家其它相关文章!

相关文章

  • git提交出现commit提醒信息界面怎样退出

    git提交出现commit提醒信息界面怎样退出

    这篇文章主要介绍了git提交出现commit提醒信息界面怎样退出问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • vscode入门教程之页面启动与代码调试

    vscode入门教程之页面启动与代码调试

    VScode是微软推出的一款轻量级的编辑器,采用了和VS相同的UI界面。今天小编给大家带来一篇如何使用vscode来进行最基本的工作的小教程,希望大家能够喜欢
    2020-01-01
  • Git的简单理解及基础操作命令详解

    Git的简单理解及基础操作命令详解

    Git是一款免费、开源的、用Linux内核开发的分布式版本控制系统。下面通过本文给大家分享Git的简单理解及基础操作命令,需要的朋友参考下吧
    2017-10-10
  • git add -A 和 git add . 的区别详解

    git add -A 和 git add . 的区别详解

    这篇文章主要介绍了git add -A 和 git add . 的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Imagenet2012数据集下载、介绍(推荐)

    Imagenet2012数据集下载、介绍(推荐)

    最近研究可能会用到该数据集,发现过去好多分享的官网下载链接已经失效,找了很久才找到了网盘的数据集,对Imagenet数据集下载需要的朋友跟随小编一起看看吧
    2022-09-09
  • Web通信 分析工具 [推荐]

    Web通信 分析工具 [推荐]

    在抓虾上看到一篇Web开发分析工具的文章(链接就免了),怎么远没有我用的东西好用呢? 还是介绍介绍我用的吧。由于平常开发只用FireFox,完成后再去调试IE, 所以这些工具绝大部分是针对FireFox的。
    2009-04-04
  • 程序员喜欢的5款最佳代码比较工具

    程序员喜欢的5款最佳代码比较工具

    这篇文章主要介绍了程序员喜欢的5款最佳代码比较工具,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-06-06
  • vscode单击新文件时覆盖旧文件的解决方法

    vscode单击新文件时覆盖旧文件的解决方法

    本文是给大家分享的作者在使用vscoe过程中遇到的一个小问题的解决方法,就是取消vscode单击新文件时覆盖旧文件,希望对大家能够有所帮助
    2020-02-02
  • 基于QGIS的研究区域遥感影像裁切下载方法(以岳麓区为例)

    基于QGIS的研究区域遥感影像裁切下载方法(以岳麓区为例)

    本文以湖南省长沙市岳麓区为例,主要讲解如何基于QGIS这款软件,把岳麓区范围内的遥感影像下载,并使用QGIS进行切片,最后用Leaflet进行展示的例子,对QGIS遥感影像裁切下载相关知识感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • 微信小程序给图片做动态标注的实例分享

    微信小程序给图片做动态标注的实例分享

    这篇文章主要介绍了微信小程序给图片做动态标注的一个简化的教程,帮助你了解如何在微信小程序中实现图片标注的功能,需要的朋友可以参考下
    2023-08-08

最新评论