系统函数示例
下面以区域为例,具体说明实现步骤
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、之后我们利用可视化查询等方式做的报表,如果关联了该机构表,上述数据权限自动生效。最终用户在浏览报表时,会根据用户所属机构不同,自动过滤出其有权限查看的数据内容。比如用户"李颖"所在区域是"华北",那么她登录后查看报表则只显示"华北"地区的数据。
Icon
注意:对于用SQL查询和原生SQL查询所创建的报表,必须在 SQL 语句中把用户属性作为过滤条件带上。因为对于原生SQL查询,数据权限是不会自动生效的。