页面树结构
转至元数据结尾
转至元数据起始

对于不同的用户,我们需要对其设置不同的查询权限。

系统函数示例

下面以区域为例,具体说明实现步骤。

1、管理员用户可以查询全部数据。

 

2、华北区域对应用户登录只能查询到以下数据。

 

实现步骤

1、实现当前用户和区域的关联,可以使用“用户属性”来实现。

此示例我是用用户组管理的。因此只要获取当前用户组信息即可实现数据权限。因此我们直接使用系统函数实现。如图,用户test属于“华东组”。

2、在需要设置数据权限的业务主题的更多操作菜单中选择 设置数据权限则会进入数据权限设置界面。

从资源树拖拽"区域"字段和系统函数CurrentUserDefaultDepartmentID(()到表达式区,并设置其关联关系为等于。

对包含区域字段的表设置区域和当前用户所属默认组编码关联。

这样当使用可视化数据集拖拽到表“顾客”的“区域”字段时,就会默认把条件添加到执行的SQL语句中。如下图:

其中:函数CurrentUserDefaultDepartmentID表示当前用户所属默认值ID,从左侧资源树“函数-系统函数”中拖拽进来。

数据权限目前只针对可视化数据集生效,如果是SQL数据集,或是原生SQL数据集,需要自己拖拽设置条件。

3、使用数据集创建资源,即可使用不同的用户登录查看效果。

用户属性示例

若无法直接根据当前用户的信息获取到机构信息,则需要用户和机构的映射表,然后创建用户属性根据不同的用户获取机构信息。

实现的方式是,在 Smartbi 中先创建一个用户属性,动态获取当前登录用户的机构信息,然后把它带到后台查询的 SQL 语句中,对数据进行过滤,从而达到数据权限控制的目的。

下面以一个实例来讲述如何使用业务属性来实现数据权限。实现过程的操作步骤如下:

1、在 公共设置 界面的 “用户属性”右侧的更多操作菜单选择 新建 >用户属性

新建用户属性如下:

2、如上图所示。在“表达式”文本框中通常输入一条 SQL 语句,从机构信息表中查询当前用户所属机构及子机构的代码值。在这里可以使用系统提供的各种函数,获取当前用户的信息。如果是把 Smartbi 报表集成到自己的系统中,甚至可以从 Session 或 Cookie 中获取机构代码值。常用的函数说明如下:

系统函数

说明

CurrentUserName

获取当前用户的登录名称。

CurrentUserAlias

获取当前登录用户的别名。

CurrentUserAllDepartmentIDRecursively

当前用户所属机构及其所有子机构的ID。

CurrentUserDepartments

当前用户所属机构ID。

CurrentUserDefaultDepartmentID

当前用户默认所属机构ID。

GetCookie

从Cookie中获取指定信息。

GetSessionAttribute

获取当前会话中的属性值。

3、设置数据权限。选择相应的关系数据源业务主题,更多操作菜单选择 设置数据权限,在设置界面上,找到对应的机构表。在其上点击更多操作菜单中的 设置 项,然后做如下设置。

4、之后我们利用可视化数据集等方式做的报表,如果关联了该map_data2表,上述数据权限自动生效。最终用户在浏览报表时,会根据用户所属机构不同,自动过滤出其有权限查看的数据内容。比如用户"李颖"所在区域是"华东",那么她登录后查看报表则只显示"华东"地区的数据。

对于用SQL数据集和原生SQL数据集所创建的报表,必须在 SQL 语句中把用户属性作为过滤条件带上。因为对于原生SQL数据集,数据权限是不会自动生效的。



  • 无标签