本章节介绍如何设置关系数据源的数据权限。多维数据源的权限不做解释。本章节以实例介绍如何设置关系数据源的数据权限。
数据权限的用例,从应用场景上划分,可以分为以下几类:
...
下面我们会举出一些例子,从不同场景的数据权限,通过较合适的实现方式进行实现。
一、查看所属机构的数据
锚 | ||||
---|---|---|---|---|
|
用例说明
演示数据:
在数据库中,有以下数据
目标要求:
在业务需求中,我们的用户会有各自的结构,我们希望每个用户进入系统能够看到自己所属机构的数据。比如华南业务员进入系统,只能看到华南的数据。华东业务员进入系统,只能看到华东的数据。
实现步骤
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中不会有机构所在的那张表。针对这种情况,我们可以通过以下方式实现。
...
通过这种方式,可以实现无论用户如何操作组合分析和透视分析报表,都只能够查看权限内的数据。
六、参数的权限控制
对于参数,有时候也需要控制其显示的选项。比如“区域参数”,默认是显示所有区域选项。希望用户登录进来,只能选择权限内的区域。如何实现?
...