页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

一、查看所属机构的数据
数据权限场景1
数据权限场景1

用例说明

演示数据:

在数据库中,有以下数据

Image RemovedImage Added

 

目标要求:

在业务需求中,我们的用户会有各自的结构,我们希望每个用户进入系统能够看到自己所属机构的数据。比如华南业务员进入系统,只能看到华南的数据。华东业务员进入系统,只能看到华东的数据。

...

在系统中先创建两个用户组。华南和华东用户组,如下:

Image RemovedImage Added

其中,我们可以设置用户组的名称、编号或者别名之一与我们实际业务上的机构名称相同。此例中设置的是用户组名称。

...

(1)找到业务需求中那张所属的数据源,右键-》设置数据权限

Image RemovedImage Added

 

(2)控制不同机构用户看到所属区域的数据。需要对数据表 map_data1中的c_region进行限制。找到表map_data1,右键->设置

Image RemovedImage Added

 

(3)在数据权限编辑器中,设置表中字段c_region=  系统函数 CurrentUserDefaultDepartmentName

Image RemovedImage Added

 

(4)范围定义中选择用户组“华南”和“华东”,适用于此范围

Image RemovedImage Added

(5)保存数据权限设置。此时基于此数据源建立的可视化查询所制作的报表已经能够实现权限控制了。并且基于数据源创建的业务主题,以及基于此数据源或者此数据源上的业务主题创建的组合分析、透视分析也能够实现权限控制。

...

T25.c_region = CurrentUserDedaultDepartmentName( ) or CurrentUserDefaultDepartmentName( ) not in ('华东','华南')

Image RemovedImage Added

 

这个where 语句分两个部分

...

在实际的业务需求中,机构是有层级的,现在我们需要实现的是不同用户登录进入系统之后,只能看到所属机构以及所有下级机构的数据。

机构层级,表:map_area2

Image RemovedImage Added

 

实际数据,表:map_data2

Image RemovedImage Added

接下来,我们需要实现。华南用户登录进入系统,可以看到华南、以及华南下属机构深圳、广州的数据;华东用户的登录进入系统,可以看到华东、以及华东下属机构上海、江苏的数据。

...

在系统中先创建好用户组。华南和华东用户组,以及其下的深圳、广州、上海、江苏用户组,如下:

Image RemovedImage Added

其中,我们可以设置用户组的名称、编号或者别名之一与我们实际业务上的机构名称相同。此例中设置的是用户组名称。

...

1.在系统中创建一个下拉树参数。从机构层级表中获取数据。

机构层级表 map_area2

Image RemovedImage Added

(1)参数备选值设置:select distinct c_area as c_area, c_parea as c_parea from map_area2。备选值直接查询出全部数据即可

Image RemovedImage Added

 

(2)参数默认值设置:select distinct c_area as c_area, c_parea as c_parea from map_area2 where c_area = CurrentUserDefaultDepartmentName() or (CurrentUserDefaultDepartmentName()='根组' and c_area='中国' )

Image RemovedImage Added

这个sql语句分两部分

第一部分是如果不是根组用户,也就是说这些用户需要过滤数据。所以默认值使用系统函数CurrentUserDefaultDepartmentName 与c_area进行过滤。则不同区域的用户登录时,此参数的默认值就是用户默认所属组名称了。也就是说当华南业务员登录时,这个参数的默认值是“华南”,当华东业务员登录时,这个参数的默认值是“华东”

...

(4)参数的根节点设置:select distinct c_area as c_area, c_parea as c_parea from map_area2 where c_area = CurrentUserDefaultDepartmentName() or (CurrentUserDefaultDepartmentName()='根组' and c_area='中国' )

Image RemovedImage Added

我们通过下拉树来控制数据筛选,实际上就是控制用户 访问时,这个参数的根节点是什么。比如华南业务员登录,那么下拉树的根节点就需要是“华南”,华南业务员可以选择“华南”,也可以展开华南下面的机构,选择下级机构查看数据。

...

(5)设置参数为多选,保存参数

 

2.在所有数据集中,使用这个参数

Image RemovedImage Added

 

3.创建过滤器

对于组合分析或者可视化查询,由于用户可以自由勾选条件和过滤器,有可能不会过滤数据。我们可以考虑创建一个过滤器,使用这个参数。并且设置这个过滤器“默认生效”以及“在分析界面隐藏”。

在数据源或者对应的业务主题下创建过滤器,并且勾选“默认生效”以及“在分析界面隐藏”

Image RemovedImage Added

注意:报表的参数设置需要使用参数默认值。

...

通过系统函数中的CurrentUserAllDepartmentIDRecursively获取到用户所属于的所有机构的ID,然后和数据进行过滤

 

1.参考“一、查看所属机构的数据”,设置数据源、业务主题、sql的权限,并且将权限语句修改为 c_area in (CurrentUserAllDepartmentIDRecursively()).

数据源表:

Image Removed

sql:

Image Removed

Image Added

 

2.在系统中,还有一些报表是基于sql查询等创建的。此步骤设置sql查询以及原生sql查询中的数据权限。

在报表对应的sql查询或者原生sql查询中,添加如下where语句

Image Added

 

说明:通过CurrentUserAllDepartmentIDRecursively,会返回用户所属组及所有下属组的编号(注意这里返回的是用户组的编号,所以前面创建用户组的时候需要注意)。比如华南业务员登录,会返回 '华南','深圳','广州'这样的数据。在权限定义的sql中,需要手动在 系统函数 CurrentUserAllDerpartmentIDRecursively外加上括号。

...

在数据库中维护一张表,记录用户和可查看的机构。此例中创建的是permiss2。数据如下:

Image RemovedImage Added

 

2.创建用户属性

在资源定制->公共设置->用户属性节点下,新建用户属性“用户可看机构”,定义如下:

Image RemovedImage Added

这个表达式先获取当前用户名,然后到permiss2表中查询用户可看的机构,并返回这些机构名称

...

参考“一、查看所属机构的数据”,设置数据源、业务主题、sql查询的权限。并且将全选语句修改为c_area in 用户可看区域这个用户属性。

数据源表:

Image RemovedImage Added

 

在系统中,还有一些报表是基于sql查询等创建的。此步骤设置sql查询以及原生sql查询中的数据权限。

sql:在报表对应的sql查询或者原生sql查询中,添加如下where语句

Image RemovedImage Added

 

三、查看权限内的数据

用例说明

...

在数据库中创建一张权限映射表,记录用户名和用户可看的机构信息。此例中创建的表位permiss3。数据如下:

Image RemovedImage Added

 

2.创建用户属性

在资源定制->公共设置->用户属性节点下,创建用户属性“用户可看机构2”。表达式如下:

Image RemovedImage Added

这个表达式先获取当前用户名,然后到permiss3表中查询用户可看的机构,并返回这些机构

...

参考“一、查看所属机构的数据”,设置数据源、业务主题、sql查询的权限。并且将全选语句修改为c_area in 用户可看机构2 这个用户属性。

数据源表:

Image RemovedImage Added

 

sql:在系统中,还有一些报表是基于sql查询等创建的。此步骤设置sql查询以及原生sql查询中的数据权限。

Image Removed在报表对应的sql查询或者原生sql查询中,添加如下where语句

...

Image Added

 

四、不同报表查看到不同数据

此种场景是指同一张报表,不同用户看到的数据不同,并且每一张报表每一个用户的权限都不一样。此种数据权限要求和报表信息、用户信息相关联,暂时无法实现。

 

...

四、自助分析的权限

在设置数据权限时,针对自助分析模块,也即组合分析和透视分析,因为用户可以自由勾选组合分析和透视分析中的字段,所以如果用户不勾选区域所在的表的字段时,我们在数据源、业务主题上设置的数据权限就不会生效,因为报表执行的sql中不会有机构所在的那张表。针对这种情况,我们可以通过以下方式实现。

...

在过滤器中将区域字段与系统函数、用户属性、参数等相关联

Image RemovedImage Added

 

2.设置默认生效和在分析界面隐藏

勾选此过滤器的“默认生效”和“在分析界面隐藏”。

Image RemovedImage Added

通过这种方式,可以实现无论用户如何操作组合分析和透视分析报表,由于过滤器始终生效,因此用户只能够查看权限内的数据。

 

  

五、参数的权限控制

六、参数的权限控制

对于参数,有时候也需要控制其显示的选项。比如“区域参数”,默认是显示所有区域选项。希望用户登录进来,只能选择权限内的区域。如何实现?

对于参数的权限控制,在数据源上设置的是不会生效的。可以在参数的备选值、默认值中进行设置。

可以直接select 系统函数

Image RemovedImage Added

 

也可以在参数定义中使用系统函数等进行过滤

Image RemovedImage Added

注意:在参数的定义中,一般也是需要对admin管理员进行例外设置。

 

此文档创建于2017-04-06。创建者:郭佳铃。

...