JAVA 数据权限设计

数据权限设计

序言

在各种系统中,要保证数据对象的安全性以及易操作性,使企业的各业务部门、职能部门能够方便而且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题。虽然企业中各个单元的工作流程有所不同,处理的数据对象也有所不同,但是在组织结构、信息的处理方式上具有很多相同的地方,这就为设计数据对象的权限控制提供了一个抽象基础。数据权限的控制不同于一般的功能权限的控制,一般的功能权限指的是某个用户、角色或者是某个用户组能不能操作某种功能。而数据权限指的是某个用户、角色或者是某个用户组对某个数据对象的操作幅度的问题,比如说用户A可以对数据对象进行完全控制,而用户B则只能对数据对象进行浏览的权限,同时数据权限控制隶属于动态权限控制的范畴。

数据权限设计

在当前的许多应用程序中都会涉及到权限管理,权限主要分为功能权限和数据权限,至于功能权限相对简单些,网上也有不少的实现方案,这里不再介绍,下边主要探讨下数据权限的设计方案。

数据权限跟功能权限有很大的不同,颗粒度很小,贯穿于整个项目的开发周期中,无法像功能权限一样在项目要结尾的时候追加,也有一些公司有自己的权限组件(功能权限),给已完成的项目配上权限组件就生效了。数据权限做不到组件级别,必须在项目设计阶段就已经规划好。之前看网上同样有人想基于SPRING切面的原理去实现数据权限,这样就可以做到了低侵入、低耦合,想法很好,可是现实很骨感,这样做使整个应用系统效率大减折扣,同样对数据权限的控制策略也很不灵活。

下边提出自己的设计方案,在系统中独立一个数据权限模块,该模块可以根据当前业务模块的SQL、当前操作人信息、当前权限的策略来自动生成对应的带数据权限的SQL语句给业务模块继续处理,如下图所示:

数据权限设计分析

SQL语句可扩展

数据权限往往作为功能权限的高级行为,可以从数据对象的幅度方面进行控制,比如用户只能看自己的订单、普通会员看不到某数据对象的高级属性(字段)等等。颗粒度这么细的情况下对结果集处理显然是不可能了,这时只能介入到SQL语句中了,此时又不想在开发阶段让开发人员过多的考虑数据权限的问题,这时最好把SQL语句给提到一个配置文件中,或者数据库中,开发阶段只需开发人员通过数据权限模块的接口调用得到已实现数据权限控制的SQL语句,这样也算做到的代码的低侵入。

SQL语句高效解析处理

数据权限模块的核心之一就有SQL语句的高效解析处理,SQL处理指根据当前登录人信息及数据权限策略生成一个带有数据权限处理结果的SQL语句,所以这里对SQL语句的解析处理必须要求精确、准确。在开发阶段由开发人员把SQL写入到配置文件中,在运行阶段由数据权限取得该SQL进行分析处理(加上数据权限),这样就完成了SQL的组装处理。

数据权限策略设计

最核心的地方就是数据权限策略的设计了,这里先引入几个概念:

1、资源:数据权限的控制对象,业务系统中的各种资源。比如订单单据、销售单等

2、主体:用户、部门、角色等

3、规则:用于【数据权限】的条件规则

这里侧重分析下主体及规则,主体有层级关系,可以为不同主体设置不同规则,比如:当前数据仅对创建人(或者某个人)有效、下级主体的权限对于上级主体同样有效(可配置,如可勾选)、非当前主体只能看到部分数据(部分数据可选)。这里只提供部分规则示例,现实环境中需要根据企业环境或者项目环境去完善这些规则。

数据权限策略优化

数据权限同样属于权限范畴,每次访问都会去请求验证权限,所以权限的认证必须要高效,这时可以写算法或者是用MEMCACHE等来提高响应速度。

JAVA 数据权限设计

时间: 2024-12-29 07:16:22

JAVA 数据权限设计的相关文章

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

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

通用数据权限设计思维概述

1.数据权限概述 1.1 什么是数据权限? 数据权限是指对系统用户进行数据资源可见性的控制,通俗的解释就是:只有符合条件的用户才能看到该条件下对应的数据资源.举个简单的例子: 本组织的销售人员只能看见本组织的客户信息. 某专职会计只能看见A部门及其下级部门的单据. 上述这些需求,使用硬编码也是可以实现的,但是在业务快速发展的过程中,类似这种数据权限需求会越来越多,如果全部采用硬编码的方式,无疑会给我们带来巨大的开发和维护压力. 1.2 要素分析 从数据权限的解释来看,只有符合条件的用户才能看到该

通用数据权限的思考与设计

1 数据权限概述 1.1 什么是数据权限? 数据权限是指对系统用户进行数据资源可见性的控制,通俗的解释就是:`符合某条件的用户只能看到该条件下对应的数据资源`.那么最简单的数据权限大概就是:用户只能看到自己的数据.而在正式的系统环境中,会有很多更为复杂的数据权限需求场景,如: 领导需要看到所有下属员工的客户数据,员工只能看自己的客户数据: 经理A能看到所有企业客户,经理B只能看到年销售额小于1000万的企业客户: 角色A能看到全国的产品数据,角色B只能看到上海的产品数据: 上述这些需求,使用硬编

大话设计,没有模式—通用权限设计与实现

当代码写多了,总有些是经验,但经验是什么呢?if-else用的次数比别人多?显然不是.有些超棒的设计可以谓之经验! 功能权限网络上流行的经典的权限设计是[主体]- [领域] - [权限]( who.what.how问题原型 ) 的设计思想,其中: [主体]可以是用户,可以是角色,也可以是一个部门 [领域]可以是一个模块,可以是一个页面,也可以是页面上的按钮 [权限]可以是"可见",可以是"只读",也可以是"可用"(如按钮可以点击) 为了简化程序开

java用户角色权限设计

实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个"非法用户"很可能就能通过浏览器轻易访问到B/S系统中的所有功能.因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的"非法用户"将会将他

java权限管理与用户角色权限设计

java权限管理与用户角色权限设计 实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能.因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将

通用权限管理设计 之 数据权限

阅读目录 前言 初步分析 通用查询机制 数据权限规则 实际应用 结语 前言 前一篇文章<通用权限管理设计 之 数据库设计方案>介绍了[主体]- [领域] - [权限]( who.what.how问题原型 ) 的设计思想 本文将对这种设计思想作进一步的扩展,介绍数据权限的设计方案. 权限控制可以理解,分为这几种 : [功能权限]:能做什么的问题,如增加产品.[数据权限]:能看到哪些数据的问题,如查看本人的所有订单.[字段权限]:能看到哪些信息的问题,如供应商账户,看不到角色. 部门等信息. 上面

ASP.NET网站权限设计实现(三)——套用JQuery EasyUI列表显示数据、分页、查询

一.说明: JQuery EasyUI下载地址:http://jquery-easyui.wikidot.com/download,最新版本1.2.2. 首先预览一下界面: 本例实现的功能: 1.多标签 2.分页列表显示数据 3.获取选中行的标识值,删除选中行 实现以上功能主要使用了: 1.layout:布局 2.tabs:多标签 3.datagrid:表格显示数据,并可以分页 4.messager:消息框 5.window:窗口 要了解用法,下载之后,参阅demo文件夹下的demo和官方文档.

OFBiz 初步 之 权限设计

简介 Apache Open For Business(Apache OFBiz) 是Apache开源的一个经典ERP项目.它提供了一套企业应用,用于集成以及自动化一些企业的"商业流程". 从学习角度来看,它也是一个非常不错的企业级应用框架.这篇文章从OFBiz的权限设计这一切入点来谈谈OFBiz对于应用系统的权限设计. 设计思想简述 OFBiz采用的"安全组"(Security Group)来将"权限"跟"用户"联系起来.系