跳到主要内容

用参数实现多字段交叉权限

一、需求背景

在报表实施过程中,可能会碰到多个字段要配置交叉权限的情况,且由于管理上的需要,使得用户的权限需要经常发生调整变动,则可以用到此文中的权限。

二、操作方法

1.方案思路

步骤一:制作一张填报表,用于配置用户名与权限字段之间的关系。

(PS:这样用户可以自己通过填报配置自己维护数据权限)

步骤二、根据步骤一中的用户名在BI系统中添加相应的用户名。

步骤三、在需要启用字段行权限的报表对应数据表中增加上权限处理的SQL语句。

2.实例介绍

环境说明:

使用Sqlsever数据库,数据库中有2张表:单据明细表qx_dingdanmx 和 配置用户权限的填报表qx_quanxian。需求为对“单据明细表”中的“部门”、“品牌”、“业务员”这3个字段要根据用户设置可查看的范围。

建表语句(含下方例子中的数据)参考:

建表语句.sql

步骤一:制作一张填报表,用于配置用户名与权限字段之间的关系。

填报后的数据库中的查询结果,如下图:

说明:

1.用户名和真实姓名,为第二步的应添加到BI系统中的用户名;

2.部门、品牌、业务员字段为需要设置行权限的字段;以部门字段来说明:

“部门1”代表只能看到“部门”字段中的行值为“部门1”的数据;

“全部”代表可以看到“部门”字段中全部的数据;

3.用户007配置了2行数据,代表对于业务员字段可以看到“业务员1”和“业务员2”范围;部门和品牌可以看到全部数据范围。

image
Preview

步骤二:在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.业务员='全部')

例子执行结果图:

image
Preview