背景说明
现客户的业务系统中,需要实现不同机构的用户查看报表时,只能查看所属机构以及下级机构的数据。
1.其中,机构相关的层级如下:
省联社(第一级)-》 市联社(第二级) -》区支行(第三级)
机构表为perm_inst,表结构如下:
数据如下:
2.数据表为perm_data,表数据如下:
以上数据在本示例中都存储于MySQL数据库中,接下来我们来实现数据权限控制。
实现步骤
一、创建用户
在smartbi中,创建用户组和用户,其中用户组的名称与业务数据中的机构信息一致。如下:
二、设置数据权限
接下来在进行数据权限的设置,有三种方式进行设置。如下:
方式一:简单参数实现方式
在所有报表上增加“选择机构_ALL”参数,该参数为多选参数,根据当前登录用户的机构信息,可下拉选择该用户的机构及下属机构进行数据的查看。
优点:实现较简单
缺点:机构参数中不存在层级的关系,并且机构的显示顺序有可能是无序的
设置步骤如下:
1.创建参数
创建一个下拉框参数,参数名称为“选择机构_ALL”,数据类型为“字符串”,控件类型为下拉框
勾选“允许多选”
备选值设置为
select INST_NAME from perm_inst where INST_NAME=CurrentUserDefaultDepartmengName() or INST_NAME1=CurrentUserDefaultDepartmentName() or INST_NAME2=CurrentUserDefaultDepartmentName() or INST_NAME3=CurrentUserDefaultDepartmentName()
(本sql仅为示例参考,实际sql需要根据自己的机构逻辑进行设置)
其中 为系统函数,获取当前用户默认所属组的名称,然后与INST_NAME、INST_NAME1、INST_NAME2、INST_NAME3几个字段进行过滤,查询出当前用户默认所属组的机构及所有下级机构
以“广州联社”机构下的用户登录为例,备选值结果如下:
几种情况:
1.参数中直接包含所有的机构
2.先选择层级,再下拉选择对应层级的机构
3.下拉树参数
(可以做到)