用参数实现多字段交叉权限
一、需求背景
在报表实施过程中,可能会碰到多个字段要配置交叉权限的情况,且由于管理上的需要,使得用户的权限需要经常发生调整变动,则可以用到此文中的权限。
二、操作方法
1.方案思路
步骤一:制作一张填报表,用于配置用户名与权限字段之间的关系。
(PS:这样用户可以自己通过填报配置自己维护数据权限)
步骤二、根据步骤一中的用户名在BI系统中添加相应的用户名。
步骤三、在需要启用字段行权限的报表对应数据表中增加上权限处理的SQL语句。
2.实例介绍
环境说明:
使用Sqlsever数据库,数据库中有2张表:单据明细表qx_dingdanmx 和 配置用户权限的填报表qx_quanxian。需求为对“单据明细表”中的“部门”、“品牌”、“业务员”这3个字段要根据用户设置可查看的范围。
建表语句(含下方例子中的数据)参考:
步骤一:制作一张填报表,用于配置用户名与权限字段之间的关系。
填报后的数据库中的查询结果,如下图:
说明:
1.用户名和真实姓名,为第二步的应添加到BI系统中的用户名;
2.部门、品牌、业务员字段为需要设置行权限的字段;以部门字段来说明:
“部门1”代表只能看到“部门”字段中的行值为“部门1”的数据;
“全部”代表可以看到“部门”字段中全部的数据;
3.用户007配置了2行数据,代表对于业务员字段可以看到“业务员1”和“业务员2”范围;部门和品牌可以看到全部数据范围。

步骤二:在BI系统中根据步骤一的表中结果添加对应用户名
根据步骤一中用户名和真实姓名在BI系统的【用户管理】模块中添加相应的用户名。
说明:
1.用户名字段的内容为登录BI系统的用户名,不能重复;
2.真实姓名字段只是为了便于用户自己区分用户和查看,无特殊意义;
3.添加用户的方式可以是手工方式,也可以基于步骤一中的表配置一个批量同步用户(具体操作方法见用户同步章节);
步骤三:在需要启用字段行权限的报表对应数据表中增加上权限处理的SQL语句
需要启用行权限的报表对应的数据表为qx_dingdanmx,只需要在此表正常查询的后面,增加上权限处理的SQL即可,如下方的3-7行。
说明:
1.第3行为第一步的权限表;
2.第4-6行为需要启用行权限的字段;
3.第7行为将权限关联系统登录的用户名,即参数$(用户名)为BI系统用户名参数,报表查询时,会将系统查询的用户名填入到该位置。
select t.*
from [dbo].[qx_dingdanmx] as t
right join (select * from qx_quanxian where 用户名='$(用户名)' ) as t1
on 1=1
and (t.部门=t1.部门 or t1.部门='全部' )
and (t.品牌=t1.品牌 or t1.品牌='全部' )
and (t.业务员=t1.业务员 or t1.业务员='全部')
例子执行结果图:
