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

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

文档目录:

 

系统函数示例

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

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表,上述数据权限自动生效。最终用户在浏览报表时,会根据用户所属机构不同,自动过滤出其有权限查看的数据内容。比如用户"李颖"所在区域是"华东",那么她登录后查看报表则只显示"华东"地区的数据。

Icon

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

 

  • 无标签