版本比较
标识
- 该行被添加。
- 该行被删除。
- 格式已经改变。
针对关系数据源创建的数据权限。
在关系数据源中通过对查询的目标表设置数据权限,当即席查询和可视化数据集中涉及到这个数据源的这些表时,数据权限设置条件会自动启用。
设置数据权限
1、进入数据权限设置页面。
入口一:在关系数据源的更多操作,选择 设置数据权限,进入“数据权限设置”界面。
选择需要设置数据权限的表,在表的更多操作,选择 设置。
入口二:在关系数据源下需要设置数据权限的表中选择更多操作,选择 设置数据权限,进入“设置”界面。
2、选择添加按钮,添加一条数据权限的设置。
设置数据权限设置方式分为“简单设置”和“高级设置”。
简单设置
1、根据需求选择数据的使用范围。详情可查看 适用范围 。
2、选择 简单设置 按钮。设置对应的数据的条件关系,然后点击 设置条件关系 按钮。详情可查看 实现原理 。
设置的数据关系如图:
3、点击 保存 按钮,进行保存。简单设置数据权限完成。
高级设置
1、根据需求选择适用或不适用的用户、角色,并选择 高级设置 按钮。详情可查看 适用范围 。
2、设置数据权限后,点击 保存 按钮。详情可查看 实现原理 。
高级设置数据权限完成。
界面介绍
“数据权限设置”界面主要分为以下几个区域:
可选资源区:该区主要列出了设置数据权限可使用的资源。
表达式设置区:该区主要用于编辑数据权限的表达式,设置数据权限表达式的资源可从“可选资源区”中拖拽。
范围定义区:该区主要是对数据权限生效的范围进行定义,包括适用的用户组、用户、角色以及优先级等。该区设置项说明如下:
设置项 | 说明 |
---|---|
适用对象 | 表示通过设置数据权限生效对象,主要有:用户组、角色、用户。这三类选项取并集。 |
优先级 | 表示当数据源存在多个数据权限时,优先执行的数据权限。数据权限优先级的数字越大,则该数据权限越先被执行 |
适用范围 | 适用范围主要有两个:
|
范围定义
用于设置数据权限对于用户生效的范围,比如很多情况下我们对于管理员用户是不希望其受到数据权限的影响的。
Image Removed
Image Added
适用范围
适用于:表示属于“适用对象”内的用户才执行当前数据权限。
不适用于:表示不属于“适用对象”内的用户才执行当前数据权限。
适用对象
可以选择的适用对象有:角色、用户、用户组。表示通过设置数据权限生效对象,主要有:用户组、角色、用户。这三类选项取并集。
实现原理
简单设置方式
优先级
表示当数据源存在多个数据权限时,优先执行的数据权限。数据权限优先级的数字越大,则该数据权限越先被执行。比如我们设置同一个数据源下两张表的数据权限,则根据优先级设置有如下两种情况:
两张表的数据权限优先级都设置为0。则数据权限中两个表的数据权限同时生效,条件之间是and关系。
若某张表的数据权限优先级大于另外一张表的数据权限,并且我们在资源中同时使用了这两张表,则数字大的执行优先级高,资源中只有数字大的数据权限生效。
下面我们以基于数据源的即席查询为例演示数据权限执行优先级。若某张表的数据权限优先级大于另外一张表的数据权限,并且我们在资源中同时使用了这两张表,则数字大的执行优先级高,资源中只有数字大的数据权限生效。
我们对northwind数据源下的orders设置数据权限如下图,并设置其优先级为0。
我们对northwind数据源下的customers设置数据权限如下图,并设置其优先级为0。
使用用户test(其用户组名称为"华北",用户别名"北京")登录系统,创建即席查询,并从orders和customers都勾选字段。
则customers和orders的权限都生效,如下图:
修改northwind数据源下的customers数据权限的优先级为1,customers的数据权限大于orders的数据权限优先级,则只会执行customers的数据权限。
数据如下:
修改northwind数据源下的orders数据权限的优先级为2,orders的数据权限大于customers的数据权限优先级,则只会执行orders的数据权限。
数据如下:
高级设置
Image Added
可选资源区:该区主要列出了设置数据权限可使用的资源。
表达式设置区:该区主要用于编辑数据权限的表达式,设置数据权限表达式的资源可从“可选资源区”中拖拽。
对于基于关系数据源的资源,我们实际上是通过SQL语句的where条件来实现不同的用户登录看到不同的数据。比如报表对应的执行SQL语句为select A.××× from A,如果要实现不同的用户登录进来看到的数据不同,我们需要给这个报表对应SQL加where限制条件。如下:
代码块 | ||
---|---|---|
| ||
select A.xxx from A where A.department = ? |
其中“ ?”号获取的值是根据不同的用户登录动态变化的:
如广州用户登录,会得到"广州"这个机构值,然后把这个机构值加到SQL语句中,就会得到广州的数据。对应SQL类似如下:select A.××× from A where A.department ='广州'
如北京用户登录,会得到"北京"这个机构值,然后把这个机构值加到SQL语句中,就会得到北京的数据。对应SQL类似如下:select A.××× from A where A.department ='北京'
因此,我们需要根据不同的用户登录获取到这个用户所属的机构。那我们如何获取到用户所属机构呢?Smartbi产品默认自带 系统函数 和 用户属性 功能可以获取到用户所属属性。
面板 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|