RBAC权限模型及数据权限扩展的实践

话说大家对RBAC权限模型应该是耳熟能详了,但真正用的好的并不多。而且原始的RBAC模型并不包含数据权限的管理,网上也几乎没有相关的文章可以参考。本人经过几个项目的实战,在其基础上扩展出一套可行的、简单的数据权限模型,希望能够帮助大家解决数据权限管理上的老大难问题。至于什么是数据权限,请移步我的其他文章,这里不再敷述。

1、关于角色的继承:

在上图描述的模型中,并没有实现角色的继承。既然一个用户可以分配多个角色,那么角色能否继承还有什么必要呢?实现这个毫无必要的功能需要大大增加应用的复杂度,可谓是得不偿失。

2、关于资源和功能:

大家可以从图中看到只有一张表的一个字段用来描述资源或功能的授权。在大多数场景中,资源和功能实际上无法进行严格的区分,有所区别的只是颗粒度的不同而已。一个业务组可以算是一种颗粒度最粗的资源,一个页面或窗体相对就精细一些了;到页面内菜单、工具栏按钮,就更精细了;如果控制的颗粒度达到页面元素或界面控件的程度,就是最细颗粒度的权限控制了。所以无论你叫资源还是功能、操作,都没有区别,你要控制的就是那些东西,只需要你描述出来,就可以被控制。

3、关于数据权限:

数据权限的授权相对功能权限来说,是完全不同的两种类型。如何为数据授权,这必须从数据权限的本质出发,从如何鉴别数据出发,只有能够像鉴别资源一样对数据加以鉴别,我们才能对数据进行正确的授权。

如果我们抛开数据值的不同(值的不同不是本质的不同)来分析数据,就会发现在一般场景中,数据的不同首先是业务类型的不同。譬如:订单数据、结算数据、生产计划数据等等。对于同一类型数据,还可以以产生数据的对象:业务部门、业务人员加以区分,这也是经常遇到的需求:经理可以看到所有的订单,业务员只能看自己的。什么叫全部?什么叫自己的?前一个概念对于不同的业务部门,实际的内容往往并不相同,A经理的全部订单指的是A部门的订单;而B经理的全部订单则是B部门的订单。至于所谓的“自己的”,就更加明显是一个相对概念了。张三的和李四的一般来说是不存在交集的。但有时候,也有一些绝对性的需求,譬如要求C部门的张三要管A部门订单的审核,同样C部门的王五则负责B部门。

这样,数据权限的授权必须要从相对和绝对两个维度进行定义,才能做到逻辑完备。所以模型中也通过两张表来描述数据权限,在相对模式中,用Mode字段来描述不同的颗粒度,而在绝对模式中用户可以直接指定部门或用户的ID。此外,用ModuleId字段来定义数据的类型,也就是产生业务的模块,这个字段所包含的逻辑不仅是区别数据的业务类型,更重要的是为应用数据权限提供依据。

4、关于权限的应用:

本人在项目中,功能权限和数据权限都应用在数据访问层,利用数据库函数返回给应用程序被授权的资源或功能的ID集合。应用程序根据ID集合通过反射加载资源或功能,达到用户不能访问非授权资源的目的。数据权限的应用方法也差不多,将数据库函数join到业务表上去,未授权的业务数据就会被过滤掉,通过join增加的Permission列,则描述了该行数据的读写权限为只读还是读写。

时间: 2024-10-28 19:51:19

RBAC权限模型及数据权限扩展的实践的相关文章

通用权限管理系统中数据权限功能开发及使用说明

数据权限指的是用户在某个权限域(一般是功能菜单)有哪些基础资源(用户,公司,角色等)的控制权限,这是权限管理系统的核心部分,也是最难掌握的. 应用场景:在某个页面,需要控制用户对地区的下拉菜单中只能显示部分城市.下面我来介绍一下说明方法及功能实现代码: 设置用户某个权限域(公司管理)上的地区访问权限 点击地区树的响应,选中时执行授权,取消选中时撤销授权. 授权和撤销权限的后台代码 /// <summary> /// 授予用户某个权限域的地区权限 /// 范围权限可以按照这个,不需要创建那么多s

RBAC权限模型——项目实战

一.前言 权限一句话来理解就是对资源的控制,对web应用来说就是对url的控制,关于权限可以毫不客气的说几乎每个系统都会包含,只不过不同系统关于权限的应用复杂程序不一样而已,现在我们在用的权限模型基本上都是以RBAC为基础进行扩展的,我们今天就将RBAC权限模型进行下介绍. 二.RBAC模型 RBAC是Role-BasedAccess Control的英文缩写,意思是基于角色的访问控制.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构成了访

企业管理系统前后端分离架构设计 系列一 权限模型篇

前段时间分别用vue和react写了两个后台管理系统的模板vue-quasar-admin和3YAdmin.两个项目中都实现了基于RBAC的权限控制.因为本职工作是后端开发,比较清楚权限控制一个管理系统应该必须具备的核心功能,而且是可以做到通用的.打算写写关于管理系统前后端分离方面的文章,也是做一个知识的总结,其中会涉及到vue,react,node,.net core等方面的知识. 术语描述 用户(Subject):发起操作的主体 对象(Object):指操作所针对的客体对象,比如文章或评论

关于数据权限设计的一些想法

序言 在各种系统中,要保证数据对象的安全性以及易操作性,使企业的各业务部门.职能部门能够方便而且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题.虽然企业中各个单元的工作流程有所不同,处理的数据对象也有所不同,但是在组织结构.信息的处理方式上具有很多相同的地方,这就为设计数据对象的权限控制提供了一个抽象基础.数据权限的控制不同于一般的功能权限的控制,一般的功能权限指的是某个用户.角色或者是某个用户组能不能操作某种功能.而数据权限指的是某个用户.角色或者是某个用户组对某个数据对象的

JAVA 数据权限设计

数据权限设计 序言 在各种系统中,要保证数据对象的安全性以及易操作性,使企业的各业务部门.职能部门能够方便而且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题.虽然企业中各个单元的工作流程有所不同,处理的数据对象也有所不同,但是在组织结构.信息的处理方式上具有很多相同的地方,这就为设计数据对象的权限控制提供了一个抽象基础.数据权限的控制不同于一般的功能权限的控制,一般的功能权限指的是某个用户.角色或者是某个用户组能不能操作某种功能.而数据权限指的是某个用户.角色或者是某个用户组对

Salesforce的数据权限机制

本文主要介绍了 Salesforce 对于系统中数据的访问控制是如何设计的,然后也了解了下 Alfresco 和 Oracle VPD 的数据权限机制.希望对一些业务系统的数据权限的访问控制设计能有所参考和启发. Salesforce 1. 产品功能 salesforce是基于 SaaS 的客户关系管理系统(CRM),该系统提供的功能覆盖了众多不同的业务领域,例如:客户资料存储,销售业务管理,协同办公等.在此基础上,Salesforce又提供了一个开发平台以帮助其客户根据自身的需求对核心系统进行

如何在应用系统中实现数据权限的控制功能(2)

关于数据权限的控制,可能我们在做很多大型一点的系统都会碰到过,可能每个人设计和解决问题的思路都有所不同,本文介绍我自己框架里面的解决思路.从上一篇<如何在应用系统中实现数据权限的控制功能>里面我们可能对权限控制和数据权限的控制有了一个初步的了解,本文接着进一步介绍在应用系统中,如何集成数据权限的控制功能. 1.数据权限实现思路分析 为了实现数据权限的控制,我们需要在通用的权限系统里面保存好对应角色具有哪些组织机构的数据权限,然后在应用系统中调用API进行过滤数据处理即可. 为了实现以上的功能需

操作权限,数据权限的解决方案

ERP系统常见的问题:操作权限.数据权限的解决方案 1.页面:通过权限控制某个页面是否显示 2.按钮:通过权限控制某个页面上的按钮是否显示 3.方法:通过权限控制某个方法是否能够访问 4.数据行:通过权限控制某个用户只能看到几行数据 后台设置权限 1.操作权限:添加计划.修改计划.搜索计划权限 2.数据权限:本人.本部门.所有 实现设置 1.页面:通过请求查询用户有哪些权限-有哪些模块 function loadMenu(){ $.ajax({ url : "", type : &qu

环境企业表单权限分配填报数据系统设计与实现

本科生毕业论文(设计) Undergraduate Graduation Thesis(Design) 题目Title:环境企业表单权限分配填报数据   系统设计与实现                 院 系 School (Department):数据科学与计算机学院  专 业 Major:   软件工程   学生姓名 Student Name:                     学 号 Student No.:                    指导教师(职称) Superviso