Skip to main content

数据权限

数据权限,主要是控制用户访问不同的业务数据的权限。

1. 功能介绍

数据权限主要是用于维度定义的场景,数据权限设置的目的是为了根据不同的用户,将用户分配到不同的维度下,限制其访问不同的数据。

例如:设置表单数据的本部/本下/本上数据权限,进行数据查看过滤。

针对机构权限过滤策略含义

本:指具有同级的数据权限,如B机构下的用户仅具有B机构的数据权限;

本下:指具有同级和下级的数据权限,如B机构下的用户具有B机构数据权限的同时,也拥有C机构的数据权限;

本上:指同级和上级,如B机构下的用户具有B机构数据权限的同时,也拥有A机构的数据权限。

img

2. 数据权限定义

V-AppBase基础平台,提供了数据权限定义相关功能。

访问目录:配置中心 → 业务系统初始化配置 → 权限设置 → 权限定义 → 数据权限定义

2.1 策略类型

在进行数据权限定义时,需要设置业务表以及过滤字段,然后根据设置的过滤条件,实现业务表数据过滤。

V-AppBase基础平台提供了2种策略类型:自定义条件SQL、自定义过滤条件。

1.自定义条件SQL

自定义条件SQL,指自定义sql语句作为数据权限的过滤条件。

在Vbase平台中,提供了关于机构权限策略的sql语句,可以直接选择使用,再根据实际需求更改过滤字段即可。

具体使用,请查看【案例-普通维度-数据权限】。

(1)获取当前管理单元机构Id本机构SQL语句

select id 
from vbase_organization.v_sys_org
where id = $bizOrgId$

(2) 获取当前管理单元机构Id本上机构SQL语句

select id 
from vbase_organization.v_sys_org
where id in (vjfunc_FindGraphSelfRelaTreeSelfAndUpperIds($bizOrgId$,'org_org'))

(3)获取当前管理单元机构Id本下机构SQL语句(效率较高)

select orgId
from vbase_prd_org_api.v_sys_OrgInnerCode
where innerCode like (
ISNULL((
select innerCode
from vbase_prd_org_api.v_sys_OrgInnerCode
where orgId = $bizOrgId$
), UUID()) || '%'
)

(4)获取当前管理单元机构Id本下机构SQL语句

select id 
from vbase_organization.v_sys_org
where id in (vjfunc_FindGraphSelfRelaTreeSelfAndLowerIds($bizOrgId$,'org_org'))
注意:
  • 在sql示例语句中,默认以当前管理单元机构Id($bizOrgId$)为例,由于当前管理单元模式只适用于群组的特殊场景。一般场景下直接使用机构ID,因此需要手动修改成sql语句($bizOrgId$ 修改成 $orgId$ 即可)。

  • vbase_organization.v_sys_org 表示 机构表vbase_prd_org_api.v_sys_OrgInnerCode 表示 机构层级码表

  • 允许根据sql语句格式要求,自定义sql语句保存,将在sql示例语句中显示。

示例:

select id 
from vbase_organization.v_sys_org
where id in (vjfunc_FindGraphSelfRelaTreeSelfAndUpperIds($orgId$,'org_org'))
含义:根据本上策略函数,查找当前登录用户的机构ID变量($orgId$),获取登录机构ID对应的本上机构ID数据集。
若进行数据权限定义的业务表过滤字段等于查询的Id数据集,则加载对应的业务表数据,实现数据权限控制功能。

2.自定义过滤条件

选择自定义过滤条件时,需要实现 vbase_prd_perm_api.SPI_PermDefinitionConditionFilterProvider 构件EP方法,可以直接选择开发平台提供的方法。

EP方法实现的返回值VSQLXML必须为完整的SQL语句格式,并且查询列只能定义一列,用于对应过滤业务表的过滤字段。

具体使用,请查看【案例-自定义过滤条件】。

EP实现配置说明:

img

2.2 新增数据权限

选择模块信息后,点击新增按钮,在【新增数据权限配置】窗体中,填写权限点名称、权限点编码等相关信息。

注意:新增数据权限之前,需要先将需要过滤的业务表,在待选表管理中选择;同样过滤字段,需要在待选表字段管理中设置。

img

2.3 编辑数据权限

选择权限点后,点击【修改】按钮即可。

img

2.4 删除数据权限

选择权限点后,点击【删除】按钮即可。

img

2.5 批量新增

对于多个业务表都使用相同的过滤条件字段,支持批量定义权限点并自动生成数据权限,可以更快捷的定义、维护数据权限点,提升配置的效率。

(1)批量添加数据权限配置

注意:选择多个过滤的业务表后,对应的过滤字段,应该在选择的业务表中同样存在,且编码一致。

img

(2)批量编辑数据权限

点击【下一步】按钮,选择批量编辑的数据权限。

img

(3)生成数据权限

点击【确定】按钮,生成对应的数据权限。

img

2.6 高级设置

权限高级设置,主要是兼容旧版本的数据权限配置功能。

旧版本的数据权限,需要在开发平台定义数据权限维度,然后再结合执行平台配置数据权限。

目前,新的数据权限定义,只需要在执行平台配置数据权限即可,无需再开发平台配置,操作简单方便。

2.7 多字段关联方式设置

在数据权限定义中,提供了多字段关联方式设置。

业务表:执行系统配置了权限的业务表集合。

or方式连接:默认不勾选,可以按需勾选。

img

(1)业务表权限条件连接方式说明

定义数据权限,可以对同个业务表创建多个权限点。在具体查询时,对业务表的过滤方式是:

  1. 同业务表同一个字段下的多个条件SQL之间固定使用or方式相连,即同字段不同条件的并集。
  2. 同业务表不同字段之间的条件SQL除了默认以and交集方式相连外,也提供or并集的方式,可自行勾选。

注:这里仅可选择在执行系统配置了权限的业务表,在开发系统配置的业务表请在高级设置/权限控制管理中设置。

img

(2)业务表权限条件连接方式实例

img

3. 案例

案例下载

以【项目管理】为例,在该案例的基础上,进行数据权限应用配置。

假设【项目列表】业务表数据如下:

img

3.1 普通维度-数据权限

在新增数据权限前,需要先选择对应模块待选表数据管理。

在本案例中,选择项目表作为待选表数据。

访问目录:配置中心 → 业务系统初始化配置 → 基础设置 → 待选数据 → 待选表管理

img

3.2 机构维度-数据权限

info

注意:设置机构数据权限的业务场景,一般要求业务表定义对应的机构ID字段,作为数据权限过滤的条件。

在新增数据权限前,需要先选择对应模块待选表数据管理。

在本案例中,选择项目表作为待选表数据。

访问目录:配置中心 → 业务系统初始化配置 → 基础设置 → 待选数据 → 待选表管理

img)

3.3 自定义过滤条件

由于自定义过滤条件,需要结合实现 vbase_prd_perm_api.SPI_PermDefinitionConditionFilterProvider 构件EP方法。

因此,在应用构件中,需要添加 vbase_prd_perm_api(vbase_产品化权限API) 引用构件。

img