...
(1)找到业务需求中那张所属的数据源,右键-》设置数据权限
(2)控制不同机构用户看到所属区域的数据。需要对数据表 map_data1中的c_region进行限制。找到表map_data1,右键->设置
(3)在数据权限编辑器中,设置表中字段c_region= 系统函数 CurrentUserDefaultDepartmentName
(4)范围定义中选择用户组“华南”和“华东”,适用于此范围
(5)保存数据权限设置。此时基于此数据源建立的可视化查询所制作的报表已经能够实现权限控制了。并且基于数据源创建的业务主题,以及基于此数据源或者此数据源上的业务主题创建的组合分析、透视分析也能够实现权限控制。
...
T25.c_region = CurrentUserDedaultDepartmentName( ) or CurrentUserDefaultDepartmentName( ) not in ('华东','华南')
这个where 语句分两个部分
...
在实际的业务需求中,机构是有层级的,现在我们需要实现的是不同用户登录进入系统之后,只能看到所属机构以及所有下级机构的数据。
机构层级,表:map_area2
实际数据,表:map_data2
接下来,我们需要实现。华南用户登录进入系统,可以看到华南、以及华南下属机构深圳、广州的数据;华东用户的登录进入系统,可以看到华东、以及华东下属机构上海、江苏的数据。
...
在系统中先创建好用户组。华南和华东用户组,以及其下的深圳、广州、上海、江苏用户组,如下:
其中,我们可以设置用户组的名称、编号或者别名之一与我们实际业务上的机构名称相同。此例中设置的是用户组名称。
...
1.在系统中创建一个下拉树参数。从机构层级表中获取数据。
机构层级表 map_area2
(1)参数备选值设置:select distinct c_area as c_area, c_parea as c_parea from map_area2。备选值直接查询出全部数据即可
(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='中国' )
这个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='中国' )
我们通过下拉树来控制数据筛选,实际上就是控制用户 访问时,这个参数的根节点是什么。比如华南业务员登录,那么下拉树的根节点就需要是“华南”,华南业务员可以选择“华南”,也可以展开华南下面的机构,选择下级机构查看数据。
...
(5)设置参数为多选,保存参数
2.在所有数据集中,使用这个参数
3.创建过滤器
对于组合分析或者可视化查询,由于用户可以自由勾选条件和过滤器,有可能不会过滤数据。我们可以考虑创建一个过滤器,使用这个参数。并且设置这个过滤器“默认生效”以及“在分析界面隐藏”。
在数据源或者对应的业务主题下创建过滤器,并且勾选“默认生效”以及“在分析界面隐藏”
注意:报表的参数设置需要使用参数默认值。
...
1.参考“一、查看所属机构的数据”,设置数据源、业务主题、sql的权限,并且将权限语句修改为 c_area in (CurrentUserAllDepartmentIDRecursively()).
数据源表:
sql:
说明:通过CurrentUserAllDepartmentIDRecursively,会返回用户所属组及所有下属组的编号(注意这里返回的是用户组的编号,所以前面创建用户组的时候需要注意)。比如华南业务员登录,会返回 '华南','深圳','广州'这样的数据。在权限定义的sql中,需要手动在 系统函数 CurrentUserAllDerpartmentIDRecursively外加上括号。
...
在数据库中维护一张表,记录用户和可查看的机构。此例中创建的是permiss2。数据如下:
2.创建用户属性
在资源定制->公共设置->用户属性节点下,新建用户属性“用户可看机构”,定义如下:
这个表达式先获取当前用户名,然后到permiss2表中查询用户可看的机构,并返回这些机构名称
...
参考“一、查看所属机构的数据”,设置数据源、业务主题、sql查询的权限。并且将全选语句修改为c_area in 用户可看区域这个用户属性。
数据源表:
sql:
三、查看权限内的数据
用例说明
...
在数据库中创建一张权限映射表,记录用户名和用户可看的机构信息。此例中创建的表位permiss3。数据如下:
2.创建用户属性
在资源定制->公共设置->用户属性节点下,创建用户属性“用户可看机构2”。表达式如下:
这个表达式先获取当前用户名,然后到permiss3表中查询用户可看的机构,并返回这些机构
...
参考“一、查看所属机构的数据”,设置数据源、业务主题、sql查询的权限。并且将全选语句修改为c_area in 用户可看机构2 这个用户属性。
数据源表:
sql:
四、不同报表查看到不同数据
...
在过滤器中将区域字段与系统函数、用户属性、参数等相关联
2.设置默认生效和在分析界面隐藏
勾选此过滤器的“默认生效”和“在分析界面隐藏”。
通过这种方式,可以实现无论用户如何操作组合分析和透视分析报表,由于过滤器始终生效,因此用户只能够查看权限内的数据。
...
对于参数的权限控制,在数据源上设置的是不会生效的。可以在参数的备选值、默认值中进行设置。
可以直接select 系统函数
也可以在参数定义中使用系统函数等进行过滤
注意:在参数的定义中,一般也是需要对admin管理员进行例外设置。
...