数据权限设计思考目前有关用户权限采用的比较多的都是基于RBAC模型
目前有关用户权限采用的比较多的都是基于RBAC模型,即通过对角色权限的定义完成对用户权限的限制。有关功能权限部分想必都比较清楚,就是将系统的功能模块划分清楚,并赋予不同角色的访问权限,这样在用户访问某个功能模块之前进行权限校验即可。但是有关数据权限部分却一直比较模糊。
在如下这篇文章中给出一个权限模型,里面提到了数据权限的建模。
这个模型中有关数据权限也是对角色进行权限限定。模型中定义了几个概念:
资源:用户将要访问的数据对象(如用户)
数据对象类型:对用户将要访问的数据对象的限定类型(如部门)
资源数据对象类型:上面两个概念关联产生的,即用户要访问什么类型的数据对象(如××部门的用户,但是此时的××是通用的,只有将数据对象类型具体化之后××才会出现)。
将上面的资源数据对象类型实例化(即××具体化)之后就形成了一条数据对象访问规则,将这条规则附加给某个角色就完成了对角色数据访问权限的限定。这个模型定义是很清楚的,但是如何具体实现,其实是一个比较复杂的问题。
一个比较直观的想法就是在业务层之上加一个数据权限校验层。
上面定义的数据对象类型其实就是用户访问的数据对象的属性,因此在校验的时候确定相关数据对象的属性是否满足用户数据权限规则即可,对于增删改就是操作之前校验,对于查询就需要对查询结果过滤。当然为了整个实现的简单需要确保系统中的所有数据对象Class都是从一个Class中继承而来限制是。这一想法实现起来比较简单,但是有一个限制和一个性能忧虑。限制就是为了保证规则校验的进行,必须使得所有数据对象都应当具有权限规则定义的相应属性,如果规则定义的属性发生变化,势必需要所有数据对象的生成方法发生变化。性能忧虑就是对查询结果的过滤,其实在一般的MIS系统中多数情况是进行查询,但是如果依照这种方法进行结果过滤的话,可能会存在性能的问题。
因此,这一想法具有紧耦合和性能问题。
另外一个想法依然无法避免紧耦合,但是可以避免性能问题。然而在逻辑上就没有上面那个直观了。这一想法就是将数据权限规则转成SQL语句,嵌入到数据访问层中去。
因为资源必定会对应到某一个数据表,而数据对象类型也会对应的到某个数据表的某个属性列,因此完全可以依据数据权限规则动态生成SQL语句。数据权限规则可以如下定义:【资源数据对象类型 关系符 右值】,右值可以分为静态和动态两种:静态就是一个具体的值;动态就是用户的某个属性,这只有在与用户关联上之后才能确定。但是由于一个角色可以有多条数据权限规则,那么他们之后可以是与和或的关系,多个规则之间可能存在冲突,必须进行避免,如:当规则之间是与关系时,如果资源数据对象类型和关系符都相同时,就有可能冲突。具体的说就是要限制角色R只能访问A部门的用户且只能访问B部门的用户,这样子势必是相互冲突的。
在数据访问层调用一个统一的SQL生成方法,传入两个参数:不加限定是要访问的数据表名和角色数据权限规则集(此时的规则集中应当已经具有准确的右值,即如果是动态的也已经根据用户属性赋值了)。方法是:依次判断规则集中的规则是否有要访问的数据表名,如果有就生成SQL语句的FROM子句和WHERE子句,最终语句规则集关系符(AND | OR)生成FROM子句和WHERE子句返回。
数据访问层获得权限校验产生的FROM子句和WHERE子句嵌入到数据访问方法中去,这样就将数据访问和权限校验结合在一起了。明显是紧耦合,但是规避了性能问题。
因此,上面两个想法各有个的优势,但是同样都有一定的问题,是不是有更好的办法?继续思考中……
分享到:
相关推荐
在IT行业中,数据权限设计是构建安全、高效系统的关键环节,尤其在企业级应用中尤为重要。数据权限设计涉及用户对数据的访问、修改和管理能力,确保数据的安全性,同时提供个性化的用户体验。这里我们将深入探讨这个...
CRM 数据权限设计流程 CRM(Customer Relationship Management,客户关系管理)系统是企业管理客户关系、销售和市场营销的重要工具。随着CRM系统的普及,数据权限控制成为一个重要的安全问题。数据权限控制流程是指...
Java 数据权限设计是确保系统中数据对象安全性和易操作性的关键环节。在企业环境中,不同部门和职能单元可能需要访问不同的数据,因此一个良好的数据权限管理系统对于协同工作的效率至关重要。数据权限控制与功能...
### 通用数据权限管理系统设计详解 #### 一、引言 在现代企业的信息化管理中,权限管理成为确保数据安全和合理使用的关键环节。一个高效、灵活的通用数据权限管理系统不仅能够提升企业的运营效率,还能更好地保护...
权限设计(包括表结构) 权限设计是任何系统不可或缺的一部分,对于系统的正常运作和管理起着至关重要的作用。权限设计的主要目标是确保系统中的每个用户都拥有适当的权限,从而确保系统的安全和稳定。 permissions...
本设计方案的主要内容包括用户认证管理设计、角色设计、权限设计、用户与角色的关系设计、权限与角色的关系设计等。 1.用户认证管理设计 用户认证管理设计是权限管理设计方案的核心部分,主要包括用户、角色和权限...
### 基于角色的权限管理数据库设计 #### 概述 本文档主要介绍了一种基于角色的权限管理系统(RBAC)的数据库设计方案,并通过具体的SQL脚本实现了该方案的基本功能。RBAC(Role-Based Access Control)是一种常用的...
本文主要探讨了如何在C#环境中设计数据权限,特别是在功能权限基础上进行扩展的【数据权限】设计。 首先,我们需要理解权限控制的三个基本类型:【功能权限】、【数据权限】和【字段权限】。【功能权限】决定用户...
在本文中,我们将针对这个问题,给出一种通用且容易扩展的数据权限设计方案。 首先,让我们了解一下当前流行的权限框架。这些权限框架已经支持数据权限,但是需要配置在接口和方法上,扩展性不是很好。因此,我们...
总的来说,UAP开发中的数据权限设计是一个复杂而关键的环节,涉及到用户角色、记录级和字段级权限、管理维度控制以及数据字典的配置等多个方面。理解并掌握这些知识点,有助于开发出符合安全标准、满足用户需求的...
### 帆软报表数据权限控制设计文档 #### 一、背景与需求描述 随着企业对数据精细化管理的要求越来越高,特别是在跨境电商行业中,如何确保不同层级的员工能够访问他们需要的数据,同时保护敏感信息不被非授权人员...
"foruo-sc-permission-V1.0数据权限管理中心"是一个专为管理数据权限设计的解决方案,它主要针对基于MyBatis框架的项目。在企业级应用中,数据权限控制是至关重要的,它确保了不同角色的用户只能访问到他们被授权的...
通用权限管理mysql数据库设计脚本,包括用户、角色、权限以及用户组等
通用数据权限管理系统设计定义 本文提供了一种集成功能权限和数据权限的解决方法,以满足多层次组织中权限管理方面的集中控制。本方法是基于角色的访问控制方法(RBAC)的进一步扩展和延伸,即在功能权限的基础上...
通用RBAC权限设计及其数据权限和分库分表 支持服务限流、动态路由、灰度发布、 支持常见登录方式, 多系统SSO登录 基于 Spring Cloud Hoxton 、Spring Boot 2.3、 OAuth2 的RBAC权限管理系统 提供对常见容器化支持 ...
前言部分强调了权限设计的重要性,指出在信息化社会,保护数据安全和隐私成为不可忽视的任务。目标是建立一套灵活、可扩展且易于管理的权限管理系统,确保用户只能访问他们被授权的资源,同时避免权限滥用和数据泄露...
Laravel 权限设计笔记 Laravel 权限设计是指在 ...通过本文,我们了解了权限设计的基本概念、数据表设计、关联表设计、Laravel Passport 和 OAuth2 授权流程等知识点。这些知识点将帮助我们更好地理解和实施权限设计。
在设计B/S系统的用户权限管理时,数据结构的分析与设计是至关重要的。用户权限管理是确保系统安全、高效运行的基础,特别是在B/S架构中,由于浏览器作为通用客户端的特性,权限控制显得尤为关键,防止未经授权的用户...
# 基于Spring Boot框架的权限... 数据权限设计用户管理、角色管理、部门管理,可操作本部门及子部门数据菜单管理、定时任务、参数管理、字典管理、系统日志,没有数据权限业务功能,按照用户数据权限,查询、操作数据。
用户角色权限设计数据模型