最近在研究权限功能,想要开发一套通用的权限模型。

主要包含了功能权限和数据权限两种。其实功能权限分为模块权限、页面权限、操作权限这三类加上数据权限就一共是四类了。

功能权限和包含的模块权限、页面权限、操作权限采用统一RBAC设计或者再引入一些角色组、用户组、权限组等分类概念就可以完美的实现了。能够应对小型系统或者大型的人员数量很多的系统。

但是数据权限是一个难点(这里只考虑数据行,而不考虑数据列能否查看的问题,这个以后再讨论),数据权限的分类是相对容易的,我认为一般的数据权限层级都可以使用树状图来呈现。但是难点在于查询数据的时候或者操作数据的时候的数据查询或者筛选。

关于部门层级可能会存在下列情况:

数据权限可能存在以下情况:
1、查看本一级及以下等级的所有内容的权限
2、查看单一等级的权限
3、查看跨部门等级的权限
4、查看本人的权限
5、动态增加等级的权限

*一个人隶属于多个部门的情况如何处理?

关于数据查询我个人认为可能有以下几种实现方式。

解决方案:
1、方法重载:
根据权限分类抽象管理员角色
针对不同的角色进行数据方法的重载
根据当前角色调用相应的数据方法获取数据
最终将数据进行合并然后去重

实现方式:service层进行切面,调用接口时分配到不同的方法,然后汇总返回

优点:单表查询或者连表查询,速度较快
缺点:代码随着层级的增加持续增加,无法适应层级的动态增添

2、数据sql拼接查询
数据表的每一张表中均存储等级标识字段
获取当前用户的所有等级
根据获取的所有等级查询数据库表,拼接sql执行查询。例如 in (1,2,3)

实现方式:
每张数据库表存 等级 字段
mybatis interceptor拦截器,将sql进行一轮select * from ( 原始sql ) where auth in ( 等级逗号拼接) 进行查询。
或者
相关查询service层方法上添加注解,使用切面来生成拼接sql,结合mybatis的apply方法进行sql拼接

优点:能够一次执行,获取到数据权限列表下的所有数据
缺点:使用 in 可能会影响效率 ,权限和数据耦合性很高,需要权限控制的表就要设置插入部门或用户组字段。
而却权限需要和部门或者用户组进行耦合。插入数据时需要明确当前操作是哪个部门或用户组的用户,将相应的部门或用户组外键插入到表中。
毕竟部门或者用户组并不是业务数据的相关数据,只有用户才是,增加了这个字段从数据建模上将有问题。
如果建立索引增加in的效率就有可能需要建立联合索引(如果多个索引可能会出现合并索引的情况或者索引失效的情况)这对sql优化可能是灾难。

3、数据筛选
将所有相关的数据查询出来
然后获取当前用户的所有等级情况
然后根据规则进行数据筛选,将相关的数据筛选出来。

优点:可以搭配规则引擎进行数据筛选。单表查询速度快。
缺点:
以空间换时间
大数据量情况下对存储和检索是一种负担,
需要搭配缓存,从缓存中获取数据,对硬件的要求提高。需要数据筛选搭配规则引擎硬编码
或者
不使用缓存和程序数据筛选,数据全量同步到搜索引擎中,改用搭配规则引擎(例如Drools)和搜索引擎(例如es),从搜索引擎中快速检索,
但这增加了多条搜索的可能性,可能会涉及多次搜索。架构复杂。程序员编码和配置的要求也比较高

关于数据权限的实现目前还没有开始,只是想到是否可以使用这三种方式的一种进行实现。我个人感觉还是第二种sql拼接查询的情况会更好,实现难度也低。

关于数据权限的实现,能否有其他更好的方式才是未来探索的方向,还请大佬能为小弟指点迷津,指出现阶段您所知的更好的方法,不吝赐教。谢谢啦

数据权限实现方案遐想相关推荐

  1. 深入探讨大数据权限管理方案-从哲学到技术

    大数据平台的权限管理工作,听起来不就是用户和密码管理这点事么?找个数据库存储一下两者的映射关系,然后再找个地方记录一下每个人可以做什么事,最后在需要的时候验证一下就好了,如果不讨论各种加解密原理和算法 ...

  2. Mybatis-Plus入门系列(18) -基于注解的动态数据权限实现方案

    数据权限简介 前言 一般的系统都离不开权限模块,它是支撑整个系统运行的基础模块.而根据项目类型和需求的不同,权限模块的设计更是大相径庭.但不管怎么变,权限模块从大的方面来说,可以分为三种大的类型:功能 ...

  3. sql 账号查询一个表勾选那个权限_Spring Cloud微服务架构中的数据权限DataPermision实现方案...

    Spring Cloud微服务架构中的数据权限DataPermision实现方案 一.出现原因 在Spring Cloud的微服务架构中,常见的权限控制除了菜单权限外,还有数据权限DataPermis ...

  4. MyBatis-Plus(2) 数据权限方案

    文章目录 一.前言 二.方案一 -- mybatis-mate-datascope 三.方案二 -- DataPermissionInterceptor数据权限插件 1.自定义数据权限插件`MyDat ...

  5. 基于组织的数据权限SQL查询方案

    背景 一些软件系统需要根据组织做数据查看权限限制,比如可以设置张三能查看或管理1个或多个组织的数据.在对张三进行配置后,张三这个账号查询对应的业务数据表时需要带上数据权限有关的where条件. 一.主 ...

  6. 数据权限设计思路_后台权限管理设计思路:三种模型分析

    编辑导语:任何系统/产品搭建时,最先考虑的都应该是权限管理模块,而且权限管理模块的清晰.稳定是平台产品健康发展的基石,权限管理核心考虑的问题是用户与权限的关系.本文作者对三种不同权限管理的版本展开了梳 ...

  7. java 数据 权限_Java如何利用Mybatis进行数据权限控制详解

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

  8. mybatis整合数据权限

    现在很多企业级应用都需要拦截数据权限, 只有配置了相应数据权限的人才能看到该数据 关于数据权限的实现, 个人想了两种实现方式 第一种是基于AOP, 配置相应的注解, 在切面中将数据权限的参数值强制设置 ...

  9. 浅谈权限(功能权限数据权限)

    一般企业上的权限部分,都是区分为功能权限和数据权限. 一.功能权限 功能权限,就是用户登录后,能看到哪些菜单,能看到哪些按钮,能执行哪些操作的权限. 一般,功能权限,已经都有很成熟的业内方案和框架了. ...

最新文章

  1. tensflower官方测试案例_大数据性能测试介绍
  2. Redis常见面试题总结
  3. 湖北大学计算机学院胡院长,学院召开新一届领导干部任命宣布大会
  4. 在HTML打开已安装的App,未安装跳转到对应的下载链接
  5. 【BZOJ1976】[BeiJing2010组队]能量魔方 Cube 最小割
  6. nginx负载分发情况日志输出
  7. Greenplum5单机部署连接报错 System was started in master-only utility mode问题修复
  8. Java并发编程实战~Balking模式
  9. 日志组件logback的介绍及配置使用方法(一)
  10. k8s selector_Kubernetes 服务选择(selector)
  11. c/c++ 网络编程 getaddrinfo 函数
  12. 43特征01——特征值、特征向量、特征值与特征向量的判定、矩阵与线性变换的特征关系、方阵的迹、特征多项式、Hamilton-Cayley 定理、特征值和特征向量基本性质、谱分解、奇异值分解
  13. 多御安全浏览器升级1.7.6版,新增扫描二维码功能
  14. hadoop常用端口号
  15. Oracle 多行显示在一行详解(listagg)
  16. 想知道raw转换jpg软件怎么用?教你raw转换的方法
  17. win10更新后IE不见了
  18. 无线手柄在ROS上的使用
  19. dede tag标签作用
  20. Nginx下上传图片404

热门文章

  1. 用SVG和VML开发工作流设计器
  2. 查找域控命令_AD域控 Dsquery 查询命令实例汇总
  3. 星际入门总汇集合N点要素
  4. java中图片排版,教你轻松集成华为Image Kit图文排版功能
  5. python取出字典的某个键_python取出字典的某个键
  6. 基于TI AM335x ARM Cortex-A8 CPU 核心板
  7. ptrace linux,【ptrace注入】linux下ptrace注入器的实现
  8. SpringMVC之实现文件上传与下载
  9. CSS伪元素BEFORE、AFTER妙用:制作时尚焦点图相框
  10. arcgis python字段计算器_ArcGIS 字段计算器 Python 坑