页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

本章节介绍如何设置关系数据源的数据权限。多维数据源的权限不做解释。本章节以实例介绍如何设置关系数据源的数据权限。

 

 数据权限的用例,从应用场景上划分,可以分为以下几类:

...

下面我们会举出一些例子,从不同场景的数据权限,通过较合适的实现方式进行实现。

一、查看所属机构的数据
数据权限场景1
数据权限场景1

用例说明

演示数据:

在数据库中,有以下数据

 

目标要求:

在业务需求中,我们的用户会有各自的结构,我们希望每个用户进入系统能够看到自己所属机构的数据。比如华南业务员进入系统,只能看到华南的数据。华东业务员进入系统,只能看到华东的数据。

 

实现步骤

1.创建用户组。

由于数据权限涉及到用户的相关信息,在考虑上面的数据权限需求时,需要先创建用户,那么得先创建用户组。由于不同机构下的用户需要看到自己所属机构的数据,那么考虑以机构来建立用户组。

...

(2)第二个部分是 or CurrentUserDefaultDepartmentName not in ('华东','华南') ,由于我们的示例是只对华东和华南用户进行限制,那么其他不应该受到限制的用户应该排除在外,因此需要加多这样一条语句。这条语句也可以变化为 or CurrentUserDefaultDepartmentName ='根组',那么就是根组下的用户不需要进行数据过滤.··· ···

 

二、查看所属机构及下级机构的数据

用例说明

在实际的业务需求中,机构是有层级的,现在我们需要实现的是不同用户登录进入系统之后,只能看到所属机构以及所有下级机构的数据。

...

接下来,我们需要实现。华南用户登录进入系统,可以看到华南、以及华南下属机构深圳、广州的数据;华东用户的登录进入系统,可以看到华东、以及华东下属机构上海、江苏的数据。

实现步骤

1.创建用户组。

由于数据权限涉及到用户的相关信息,在考虑上面的数据权限需求时,需要先创建用户,那么得先创建用户组。由于不同机构下的用户需要看到自己所属机构的数据,那么考虑以机构来建立用户组。

...

第三种:考虑将用户和用户组的对应关系,在数据库中维护一张表。通过用户属性,获取到当前用户名称到数据库中查询用户所能查看到的机构,再与数据进行过滤。

 

 

方式一

考虑为所有的报表增加一个机构的下拉树参数,通过控制参数的根节点,来控制参数的下拉选项。使得用户选择此参数值时,只能选择所属机构或者下属机构,来筛选数据。

...

通过这种方式,可以实现用户查看所属机构及其下属机构的数据。并且可以自由选择参数中的机构。

 

方式二

通过系统函数中的CurrentUserAllDepartmentIDRecursively获取到用户所属于的所有机构的ID,然后和数据进行过滤

1.参考“一、查看所属机构的数据”,设置数据源、业务主题、sql的权限,并且将权限语句修改为 c_area in (CurrentUserAllDepartmentIDRecursively()).

...

说明:通过CurrentUserAllDepartmentIDRecursively,会返回用户所属组及所有下属组的编号(注意这里返回的是用户组的编号,所以前面创建用户组的时候需要注意)。比如华南业务员登录,会返回 '华南','深圳','广州'这样的数据。在权限定义的sql中,需要手动在 系统函数 CurrentUserAllDerpartmentIDRecursively外加上括号。

 

 

方式三

考虑将用户和用户组的对应关系,在数据库中维护一张表。通过用户属性,获取到当前用户名称到数据库中查询用户所能查看到的机构,再与数据进行过滤。

...

这个表达式先获取当前用户名,然后到permiss2表中查询用户可看的机构,并返回这些机构名称

 

3.设置数据权限

参考“一、查看所属机构的数据”,设置数据源、业务主题、sql查询的权限。并且将全选语句修改为c_area in 用户可看区域这个用户属性。

数据源表:

 

sql:

 

三、查看权限内的数据

用例说明

查看权限内的数据,这种权限一般是指这样的场景:华南业务员进入系统,除了查看到华南及其下属机构深圳、广州的数据之外,还可以查看到华东的数据;华东业务员登录进入系统,可以看到华东及其下属机构上海、江苏的数据。存在这种跨机构的数据查询。

实现步骤

这种查看权限内的数据的方式,一般采用在数据库中维护权限表,并且通过用户属性来获取,设置其数据权限。

...

这个表达式先获取当前用户名,然后到permiss3表中查询用户可看的机构,并返回这些机构

 

3.设置数据权限

参考“一、查看所属机构的数据”,设置数据源、业务主题、sql查询的权限。并且将全选语句修改为c_area in 用户可看机构2 这个用户属性。

数据源表:

 

sql:

 

 

四、不同报表查看到不同数据

此种场景有客户提起过,不过目前系统中应该还不能够比较好的实现。暂时待定。

 

五、自助分析的权限

在设置数据权限时,一般报表都还比较简单设置。而组合分析和透视分析,会比较奇葩些。因为用户可以自由勾选组合分析和透视分析中的字段,所以如果用户不勾选区域所在的表的字段时,我们在数据源、业务主题上设置的数据权限就不会生效,因为报表执行的sql中不会有机构所在的那张表。针对这种情况,我们可以通过以下方式实现。

...

通过这种方式,可以实现无论用户如何操作组合分析和透视分析报表,都只能够查看权限内的数据。

 

 

 

六、参数的权限控制

对于参数,有时候也需要控制其显示的选项。比如“区域参数”,默认是显示所有区域选项。希望用户登录进来,只能选择权限内的区域。如何实现?

...