Foxnic-Web 中数据权限的使用

LeeFJ
• 阅读 545

Foxnic-Web 中数据权限的使用

概述

  Foxnic-Web 中所指的数据权限是指用户能够查询到的数据行的范围。在系统实施时,为了让不同的角色可以看到不同的数据,可以通过配置数据权限的方式灵活控制查询范围。下面我们来了解一下 Foxnic-Web 是如何配置和使用数据权限的。

注册环境变量

  环境变量在数据权限内部进行逻辑判断和SQL的变量代入时使用。环境变量可分为全局环境变量和本地环境变量。全局环境变量注册后,可在整个应用内部使用。本地环境变量注册后,仅在对应的模块范围内使用,本地环境变量通常与 Po 来划分,即在对应的 Po 查询 Service 中可以使用。 Foxnic-Web 中数据权限的使用 本地环境变量

配置权限规则

  1)配置数据权限规则
  打开数据权限规则的基本信息,如图所示:
Foxnic-Web 中数据权限的使用

  代码: 数据权限代码,全局唯一,会在 java 代码中代入,以指定使用哪个数据权限规则。
PO类型: 用于指定查询的对象,Po 类型的完全限定名。

  2)配置范围与规则树
  在系统的找到,数据权限,并进行配置:
Foxnic-Web 中数据权限的使用

  以“我的办结流程为例”,从字面理解,流程查询范围框定在
  1、流程状态必须是已经结束的;
  2、当前登录人是流程审批人;

  上图中只有一个范围项,那么就只有一个Select语句,当有多个范围项时,数据权限SQL构建器会生成多个Select语句,并把他们 union 起来后执行。
  点击范围的“条件”按钮,打开范围配置,并中选择一个条件节点,如图所示:
Foxnic-Web 中数据权限的使用
  条件节点的属性包括:
  名称: 条件节点的名称
  生效: 控制当前条件节点是否生效,即在生成SQL语句时,是否拼接。
  应用条件: SpringEL表达式,要求返回一个逻辑值,如果改表达式在运行时返回 true 则当前条件节点拼接入最终的查询语句,否则不进入最终的查询语句。相 关变量可以通过“变量”黑色小按钮进行选择。选择的范围即默认的上下文环境以及手动注册的上下文环境。
  测试Vo值: 指定Vo值(JSON Object 字符串),模拟前端传入的参数,点击黑色按钮“测试”测试刚刚设置的应用条件SpringEL表达式。
  前置逻辑: 当前表达式出现在查询语句时使用的条件逻辑是 or 或 and。
  目标属性: 即条件表达式中用于过滤的属性字段,如此处我们要求最终查询语句中出现 status='passed' 的条件表达式,那么目标属性就是 status。所以,一个条件节点仅是对一个目标属性的配置,如果要配置多个目标属性的复杂查询,则需要使用条件逻辑树。
  条件类型: 条件表达式的判断方式,SQL中的比较运算符。
  变量: 目标属性通过比较运算符进行=条件判断的值,要求为 JSON Array 字符串。支持常量和环境变量,如果是环境变量,需要使用 ${} 表示里面的内容是一个SpringEL 表达式,如 ["${getSession().getActivatedEmployeeId()}"]。
  备注: 自定义的备注信息。

  逻辑节点分两种类型,复合节点和叶子节点,复合用于组合叶子节点间的优先级,复合节点内的节点在最终的SQL语句中将被一个括号括起来。

例如,本例中最终生成的条件类似以下结构:

status='passed' and (approverEmployeeId='xxx' or approverRoleeId='xxx')

使用数据权限

  配置数据权限规则以后,需要在代码中指定使用某个数据权限规则。
Foxnic-Web 中数据权限的使用

  每一个数据权限规则,都需要设置一个代码,这个代码在程序中作为参数传入即可。

  使用 chs_instance_joined 数据权限时,输出的SQL语句如下:

SELECT * FROM ( select * from ( -- 第一个范围 ( select t.* from chs_change_instance t WHERE ( ( t.deleted= 0 AND t.tenant_id= 'T001' )) AND ( ( ( t.drafter_id = '558321538131034112' ) AND ( t.drafter_id = '558321538131034112' ))) ) union -- 第二个范围 ( select t.* from chs_change_instance t WHERE ( ( t.deleted= 0 AND t.tenant_id= 'T001' )) AND ( ( ( exists( SELECT 1 FROM (select * from chs_change_approver WHERE ( approver_type = 'employee' ) AND ( deleted= 0 ) ) t_0 WHERE t.id = t_0.instance_id AND ( t_0.approver_id = '558321538131034112' ) )) OR ( exists( SELECT 1 FROM (select * from chs_change_approver WHERE ( approver_type = 'busi_role' ) AND ( deleted= 0 ) ) t_0 WHERE t.id = t_0.instance_id AND ( t_0.approver_id IN ( '498946989573017600' )) )))) ) -- 分页以及排序 ) t ORDER BY t.create_time DESC ) PAGED_QUERY LIMIT 0 , 50

  使用 chs_instance_approved 数据权限时,输出的SQL语句如下:

SELECT * FROM ( -- 范围查询语句 select t.* from chs_change_instance t WHERE ( ( t.deleted= 0 AND t.tenant_id= 'T001' )) AND ( ( ( t.status = 'passed' ) AND ( ( exists( SELECT 1 FROM (select * from hrm_employee WHERE ( deleted= 0 ) AND ( tenant_id= 'T001' ) ) t_0 join (select * from chs_change_approver WHERE ( approver_type = 'employee' ) AND ( approver_type = 'employee' ) AND ( approver_type = 'employee' ) AND ( deleted= 0 ) ) t_1 on t_1.approver_id = t_0.id WHERE t.id = t_1.instance_id AND ( t_0.id = '558321538131034112' ) )) OR ( exists( SELECT 1 FROM (select * from chs_change_approver WHERE ( approver_type = 'busi_role' ) AND ( deleted= 0 ) ) t_0 WHERE t.id = t_0.instance_id AND ( t_0.approver_id IN ( '498946989573017600' )) ))))) ORDER BY t.create_time DESC -- 分页以及排序 ) PAGED_QUERY LIMIT 0 , 50

  最终,查询结果按数据权限配置的范围返回。.

相关项目

  https://gitee.com/LeeFJ/foxnic
  https://gitee.com/LeeFJ/foxnic-web
  https://gitee.com/lank/eam
  https://gitee.com/LeeFJ/foxnic-samples

官方文档

  http://foxnicweb.com/docs/doc.html

点赞
收藏
评论区
推荐文章
科工人 科工人
3年前
go mod环境搭建
前言gomod是golang最新的模块依赖管理的工具,推荐使用。go1.11通过设置环境变量GO111MODULE来决定是否启用go1.13已经默认支持,以下以1.13为例配置环境变量exportGOPROXY或exportGOPROXYexportGOPATH"/Users/XXX
Wesley13 Wesley13
3年前
java 环境配置 maven 环境配置
1、windows下Java环境的安装和配置:下载jdk并安装配置环境变量:(1)新建JAVA\_HOME环境变量,赋值为JDK的安装目录:(2)新建CLASSPATH环境变量,赋值为.;%JAVA\_HOME%\\lib\\dt.jar;%JAVA\_HOME%\\lib\\tools.jar;(3)在PATH环境变量中追加J
Alonso095 Alonso095
3年前
Python的环境搭建和下载
Python是一个跨平台、可移植的编程语言,因此可在windows、Linux和MacOSX系统中安装使用。安装完成后,你会得到Python解释器环境,可以通过终端输入python命令查看本地是否已经按照python以及python版本。这里有一点需要注意的是,如果没有将python的安装目录添加到环境变量中,会报错(python不是内部命令或外部命
Stella981 Stella981
3年前
DISPLAY变量和xhost(原创)
DISPLAY在Linux/Unix类操作系统上,DISPLAY用来设置将图形显示到何处.直接登陆图形界面或者登陆命令行界面后使用startx启动图形,DISPLAY环境变量将自动设置为:0:0,此时可以打开终端,输出图形程序的名称(比如xclock)来启动程序,图形将显示在本地窗口上,在终端上输入printenv查看当前环境变量,
Wesley13 Wesley13
3年前
GOPATH
\TOC\GOPATH工作目录就是我们用来存放开发的源代码的地方,对应的就是Go里的GOPATH这个环境变量。这个环境变量指定之后,我们编译源代码等生成的文件都会放到这个目录下,GOPATH环境变量的配置参考golang环境搭建(https://www.oschina.net/action/GoToLink?urlhttps%3A%
Stella981 Stella981
3年前
Linux环境变量配置全攻略
Linux环境变量配置在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法。下面所有例子的环境说明如下:系统:Ubuntu14.0用户名:uusama需要配置MySQL环境变量路径:/home/uusama/mysql/binLinux读取环境变量读
Wesley13 Wesley13
3年前
Java 环境变量配置及其作用
在java中需要设置三个环境变量(1.5之后不用再设置classpath了,但个人建议继续设置以保证向下兼用问题)JDK安装完成之后我们来设置环境变量:右击“我的电脑”,选择“属性”,选择“高级”标签,进入环境变量设置,分别设置如下环境变量:(1)直接配置path变量:  为什么要配置path变量?    因为电脑系统将根据该变量的值找到java编
Stella981 Stella981
3年前
Linux中环境变量文件及配置
一、环境变量文件介绍转自:http://blog.csdn.net/cscmaker/article/details/7261921Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。所以管理环境变量的文件也分为系统级和用户级的,下面贴一个网上找
Wesley13 Wesley13
3年前
mysql远程访问数据库的问题解决
关键词:cmd远程访问mysql数据库—————————————————————————————————————————————————————————— 更新:之前刚下载mysql不太了解,这篇文章简化并修改下。系统环境变量的设置:找到mysql.exe的位置,将其设置为环境变量,用户环境变量和系统环境变量都可以,之后就
Stella981 Stella981
3年前
Shell运行环境之环境变量
在Windows系统中,我们经常需要设置环境变量,特别是安装完JavaJDK之后。而在Linux里面也是需要对一些环境变量进行设置,比如PATH(执行文件的路径),http\_proxy(http代理)等。本文主要介绍三种环境变量临时变量,用户变量和系统变量,并对其作用的先后做一些验证。简介环境变量(https://