本文来说下基于角色的权限控制模型RBAC

文章目录

  • 概述
  • 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的演化进程

用户与权限直接关联

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

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

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

  • 现在用户是张三、李四,以后随着人员增加,每一个用户都需要重新授权
  • 或者张三、李四离职,需要针对每一个用户进行多种权限的回收

一个用户拥有一个角色

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

一个用户拥有一个角色

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

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


一个用户一个或多个角色

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

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

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


页面访问权限与操作权限

页面访问权限

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

操作权限

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


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


数据权限

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

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

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


本文小结

本文详细介绍了基于角色的权限控制模型RBAC

基于角色的权限控制模型RBAC相关推荐

  1. 图文详解基于角色的权限控制模型RBAC

    我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问.操作.数据权限.形成理论的权限控制模型有:自主访问控制(DAC: Discretionary Access Control).强制 ...

  2. 基于属性的权限控制模型ABAC

    本文来说下基于属性的权限控制模型ABAC 文章目录 RBAC 的缺憾 什么是ABAC访问控制模型 ABAC相关术语 ABAC的使用场景 为什么 ABAC 能解决复杂场景下的问题 Attribute 易 ...

  3. AspNetForums中基于角色的权限控制

    AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据 ...

  4. 部门角色权限rbac_k8s十 | 一文读懂基于角色的权限控制RBAC

    一.ServiceAccount . 1. ServiceAccount 介绍 首先Kubernetes中账户区分为:User Accounts(用户账户) 和 Service Accounts(服务 ...

  5. Django 基于角色的权限控制

    有一种场景, 要求为用户赋予一个角色, 基于角色(比如后管理员,总编, 编辑), 用户拥有相应的权限(比如管理员拥有所有权限, 总编可以增删改查, 编辑只能增改, 有些页面的按钮也只有某些角色才能查看 ...

  6. IdentityServer4实战 - 基于角色的权限控制及Claim详解

    一.前言 大家好,许久没有更新博客了,最近从重庆来到了成都,换了个工作环境,前面都比较忙没有什么时间,这次趁着清明假期有时间,又可以分享一些知识给大家.在QQ群里有许多人都问过IdentityServ ...

  7. Java系列技术之SSH整合+用户权限控制模型项目-钟洪发-专题视频课程

    Java系列技术之SSH整合+用户权限控制模型项目-62人已学习 课程介绍         将前面讲过的Spring5.SpringMVC.Hibernate5和前端框架Easyui整合起来最终完成一 ...

  8. 实战:k8s中基于角色的权限访问控制-RBAC(成功测试-博客输出)-20211005

    目录 文章目录 目录 写在前面 基础知识介绍 实验环境 实验软件 老师原课件内容 1..用K8S CA签发客户端证书 2. 生成kubeconfig授权文件 3. 创建RBAC权限策略 4.指定kub ...

  9. 版本管理:Subversion Edge:角色与权限控制

    这篇文章介绍一下Subverison Edge中内置的角色和权限控制方式和Edge所提供的页面操作功能. 环境和事前准备 Subversion Edge环境准备和仓库创建的操作可参看如下文章: htt ...

最新文章

  1. BCH专属“谷歌地图”凸显BCH魅力
  2. Linux上制作可执行的共享库示例
  3. 强大的shell常用命令集锦
  4. ANNOTATION PROCESSING 101 by Hannes Dorfmann — 10 Jan 2015
  5. C++vector容器-互换容器
  6. Dajngo-Xadmin 修改菜单摆放排序
  7. pla3d打印材料密度_模具粉必看!总有一款粉末能解决您的问题-毅速3D打印研制...
  8. 浅析C#的事件处理和自定义事件
  9. opencv实现几幅图像拼接成一整幅大图
  10. C#LeetCode刷题之#874-模拟行走机器人​​​​​​​(Walking Robot Simulation)
  11. 【script】python多线程模块threading的使用
  12. Java中的String.hashCode()方法可能有问题?
  13. .net String Formatter 格式转换
  14. python画图代码大全-Python Matplotlib 绘图使用指南 (附代码)
  15. 前端开发所需基本环境和软件配置
  16. java自己写的视频截图工具
  17. 蓝牙渗透测试过程:部分工具使用方法
  18. 【力扣时间】【807】【中等】保持城市天际线
  19. 红米K30 Pro再次降价700元,小米加速收割5G手机市场
  20. 给定a和n,计算a+aa+aaa+aaaa+...+a...a(n个a) 的和

热门文章

  1. NSBundle 的理解和 mainBundle
  2. Baseline管理
  3. 国内域名商.wang总量统计TOP10:新网居亚 地位不稳
  4. C# NameValueCollection
  5. jQuery:插入,复制,替换和删除节点
  6. 企业如何考虑自己的网络防护设备
  7. PHP中通过Web 执行C/C++应用程序
  8. C标准函数库中获取时间与日期、对时间与日期数据操作及格式化
  9. MySQL的五种日期和时间类型
  10. 堆排序工具类(适用于top k问题,java泛型实现)