数据权限设计

前言

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

而数据权限指的是某个用户、角色或者是某个用户组对某个数据对象的操作幅度的问题,比方说用户A可以对数据对象进行全然控制,而用户B则仅仅能对数据对象进行浏览的权限,同一时候数据权限控制隶属于动态权限控制的范畴。

数据权限设计

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

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1MjUxODkwMzQ3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

数据权限设计分析

SQL语句可扩展

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

SQL语句高效解析处理

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

数据权限策略设计

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

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

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

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

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

数据权限策略优化

同一类别的职权范围内的数据权限,每个访问权限请求验证。因此将需要高效权威认证,然后该算法可以写或MEMCACHE为了改善响应速度等。

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

  1. 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路

    前言:“我们有一个订单列表,希望能够根据当前登陆的不同用户看到不同类型的订单数据”.“我们希望不同的用户能看到不同时间段的扫描报表数据”.“我们系统需要不同用户查看不同的生产报表列”.诸如此类,最近经 ...

  2. SpringCloud微服务实战——搭建企业级开发框架(二十八):扩展MybatisPlus插件DataPermissionInterceptor实现数据权限控制

    一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展Mybatis-Plus的插件DataPermissionInterce ...

  3. Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲

    Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台:   微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...

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

    java权限管理与用户角色权限设计 实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器 ...

  5. Java工作流引擎-集团模式下的权限 设计与实现

    关键字 工作流开发框架权限设计.用户组.岗位.集团模式应用. java工作流程引擎, .net 工作流引擎,工作流开发框架 相关的表结构 -- 相关组织-表结构. SELECT No,Name,Par ...

  6. 企业应用:浅谈 “数据权限” 和 查询 API 设计

    背景 多数企业应用都需要对数据权限进行控制,如:某个用户只能看到某个范围的数据(数据行).某个用户只能看到某几列数据(数据列).本文以数据行级别的权限控制为范例,谈谈如何设计权限模型和查询 API. ...

  7. Transform数据权限浅析2之利用Java完成权限设置

    一:项目背景 1.1:cognos的两种建模工具 为了更好的满足客户的需求,提升报表展现的效率,一种建模工具已经不能满足报表开发和展现的需要.Cognos除了给我们提供了一种基于关系型数据库的建模工具 ...

  8. Java利用Mybatis进行数据权限控制

    权限控制主要分为两块,认证(Authentication)与授权(Authorization).认证之后确认了身份正确,业务系统就会进行授权,现在业界比较流行的模型就是RBAC(Role-Based ...

  9. 中小型WEB系统权限日志数据表设计

    中小型WEB系统权限日志数据表设计 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjc1MDU3OA==/font/5a6L5L2T/fontsi ...

随机推荐

  1. Main Memory Object-Relational Database Management System

    Main Memory Object-Relational Database Management System FastDBMain Memory Relational Database Manag ...

  2. Delphi的指针 good

    Pointers are like jumps, leading wildly from one part of the data structure to another. Their introd ...

  3. Nginx之http_image_filter_module模块使用

    一.安装 #yum install gd-devel # #./configure --prefix=/usr/local/nginx \ # --with-debug \ # --with-http ...

  4. POJ 2991 Crane(线段树+计算几何)

    POJ 2991 Crane 题目链接 题意:给定一个垂直的挖掘机臂.有n段,如今每次操作能够旋转一个位置,把[s, s + 1]专程a度,每次旋转后要输出第n个位置的坐标 思路:线段树.把每一段当成 ...

  5. Android ARM汇编语言

    简介 ARM是Advanced RISC Machine的首字母缩写,它可以称之为一家嵌入式处理器的提供商,也可以理解为一种处理器的架构,还可以将它作为一套完整的处理器指令集. 原生程序与ARM汇编语 ...

  6. Otacle表查询

    1    查询表结构       语法:desc 表      2    查询全部列       语法:select * from 表名      3    查询指定列       语法:select ...

  7. Android---两个视图间的淡入淡出

    本文译自:http://developer.android.com/training/animation/crossfade.html 淡入淡出动画(也可以作为溶解动画)是指在渐渐的淡出一个UI组件的 ...

  8. A Game of Thrones(11) - Daenerys

    Daenerys Targaryen wed Khal Drogo with fear and barbaric([bɑː'bærɪk]野蛮的,粗野的) splendor(光彩:壮丽) in a fi ...

  9. class 添加样式,删,开关 【选择】addClass,removeClass,toggleClass

    <1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>< ...

  10. Python数据结构-序表

    序表解包: list=['aa','bb','cc'] [a1,a2,a3]=list