Foxnic-Web 中数据权限的使用

注册环境变量

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

注册全局环境变量

本地环境变量

配置权限规则

1)配置数据权限规则

打开数据权限规则的基本信息,如图所示:

代码:数据权限代码,全局唯一,会在 java 代码中代入,以指定使用哪个数据权限规则。

PO类型:用于指定查询的对象,Po 类型的完全限定名。

2)配置范围与规则树

在系统的找到,数据权限,并进行配置:

以“我的办结流程为例”,从字面理解,流程查询范围框定在

1、流程状态必须是已经结束的;

2、当前登录人是流程审批人;

上图中只有一个范围项,那么就只有一个Select语句,当有多个范围项时,数据权限SQL构建器会生成多个Select语句,并把他们 union 起来后执行。

点击范围的“条件”按钮,打开范围配置,并中选择一个条件节点,如图所示:

条件节点的属性包括:

名称:条件节点的名称

生效:控制当前条件节点是否生效,即在生成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')

使用数据权限

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

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

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

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

相关项目:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值