Foxnic-Web 中数据权限的使用

注册环境变量

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

配置权限规则

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

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

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

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

上图中只有一个范围项,那么就只有一个Select语句,当有多个范围项时,数据权限SQL构建器会生成多个Select语句,并把他们 union 起来后执行。
点击范围的“条件”按钮,打开范围配置,并中选择一个条件节点,如图所示:
Foxnic-Web 中数据权限的使用_第3张图片
条件节点的属性包括:
名称:条件节点的名称
生效:控制当前条件节点是否生效,即在生成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 中数据权限的使用_第4张图片

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

使用 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

你可能感兴趣的:(Foxnic-Web 中数据权限的使用)