我的编程空间,编程开发者的网络收藏夹
学习永远不晚

若依 数据权限图文详细理解及改造

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

若依 数据权限图文详细理解及改造

数据权限

所谓数据权限,就是根据不同角色的登录用户,查看不同的列表数据

若依数据权限

若依的数据权限也是基于角色实现的,支持五种权限模式,按权限大小一次排列:

  • 全部数据权限,表示拥有所有部门的数据权限 ·
  • 自定数据权限,表示拥有指定的若干部门的数据权限
  • 本部门数据权限,表示仅拥有用户所属部门(不包括子部门)的数据权限
  • 本部门及以下数据权限,表示仅拥有用户所属部门和所有子部门的数据权限
  • 仅本人数据权限,表示仅拥有用户本人的数据权限

页面设置数据权限

若依页面数据权限
若依设置数据权限不止页面需要设置,后端也要设置,只设置页面不设置后端就没用!!,对于这个,后面会有详细解释

后端设置数据权限

若依后端设置数据权限非常简单,使用 @DataScope 注解即可实现数据权限
@DataScope 注解下有三种属性:deptAlias ,userAlias,permission
@DataScope注解

注意:

使用此注解的deptAlias 和 userAlias 属性 需数据库有dept_id或者user_id 并且在SQL后面拼接 ${params.dataScope} 而且是实体类需继承BaseEntity 类所以无法支持mybatis-Plus
SQL
因为数据权限的实质还是拼接SQL,而params.dataScope就是框架预留的拼接。而 params就在BaseEntity 中
BaseEntity 类

deptAlias

根据部门设置数据权限

  1. 首先在角色管理中设置本部门数据权限或者本部门及以下数据权限
    在这里插入图片描述
  2. 然后在后端接口实现类上添加 @DataScope(deptAlias = “t1”) ,此t1是你要查询的数据表的别名,如果是单表查询的话即可不设置值,直接 @DataScope(deptAlias) 即可。
    在这里插入图片描述
    3.在页面上查看数据

admin查看(admin能查看所有数据):

在这里插入图片描述

切换供应商账号(供应商设置的自定义数据权限,能看到供应商和施工方数据):

在这里插入图片描述
在这里插入图片描述

切换服务商账号(服务商只能看到服务商数据):

在这里插入图片描述
在这里插入图片描述

userAlias

userAlias 同deptAlias 这里就不多啰嗦了(主表内必须有user_id)

* permission

着重讲一下permission,permission的定义是 权限字符(用于多个角色匹配符合要求的权限)默认根据权限注解@ss获取,多个权限用逗号分隔开来,如果注解没有写的话,就默认是你角色的权限
在这里插入图片描述
这里我改造了一下,因为我们业务需要,比如一个项目是a部门创建的,这个项目理应只有a部门才能看到,项目需要一个审批人,而这个审批人是b部门下的或者其他人,所以登录人如果是审批人也应该看到,我们审批人字段为approval_id,可能还会有经办人或者什么什么各种人,所以改造了一下permission属性,使得也能够自动拼接在系统数据权限的后面
在这里插入图片描述

if ( StringUtils.isNotEmpty(permission) && !permission.equals(PermissionContextHolder.getContext())){       //自定义筛选字段       sqlString.append(StringUtils.format(" OR {} = {}", permission, user.getUserId()));}

实现类:
在这里插入图片描述
自动拼接:
在这里插入图片描述
既拼接了部门权限,又拼接了我们自定义字段的权限,而且是or 只要满足一个即可查询出数据
在这里插入图片描述
使得供应商创建的原本供应商才能看到的数据,因为登录人是此项目的审批人,也能看到数据

DataScopeAspect

DataScopeAspect是@DataScope的切面类,也是若依框架实现拼接权限SQL的核心
dataScopeFilter 方法,是主要方法
在这里插入图片描述
里面的常量即为我们在页面上设置的不同数据权限
在这里插入图片描述
如果表里面没有dept_id或者user_id的话,比如只有createdBy 创建人id,实在需要改造的话,也可以把这里SQL里面的user_id改成你想要的createdBy 字段

注:以上所有数据及名称都经过处理,均不涉及公司机密

来源地址:https://blog.csdn.net/weixin_46573158/article/details/128147561

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

若依 数据权限图文详细理解及改造

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

若依 数据权限图文详细理解及改造

数据权限 所谓数据权限,就是根据不同角色的登录用户,查看不同的列表数据 若依数据权限 若依的数据权限也是基于角色实现的,支持五种权限模式,按权限大小一次排列: 全部数据权限,表示拥有所有部门的数据权限 ·自定数据权限,表示拥有指定的若干部门
2023-08-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录