数据权限
数据权限,主要是控制用户访问不同的业务数据的权限。
1. 功能介绍
数据权限主要是用于维度定义的场景,数据权限设置的目的是为了根据不同的用户,将用户分配到不同的维度下,限制其访问不同的数据。
例如:设置表单数据的本部/本下/本上数据权限,进行数据查看过滤。
本:指具有同级的数据权限,如B机构下的用户仅具有B机构的数据权限;
本下:指具有同级和下级的数据权限,如B机构下的用户具有B机构数据权限的同时,也拥有C机构的数据权限;
本上:指同级和上级,如B机构下的用户具有B机构数据权限的同时,也拥有A机构的数据权限。
2. 数据权限定义
V-AppBase基础平台,提供了数据权限定义相关功能。
访问目录:配置中心 → 业务系统初始化配置 → 权限设置 → 权限定义 → 数据权限定义
在进行数据权限定义时,需要设置业务表以及过滤字段,然后根据设置的过滤条件,实现业务表数据过滤。
V-AppBase基础平台提供了2种策略类型:自定义条件SQL、自定义过滤条件。
自定义条件SQL,指自定义sql语句作为数据权限的过滤条件。
在Vbase平台中,提供了关于机构权限策略的sql语句,可以直接选择使用,再根据实际需求更改过滤字段即可。
具体使用,请查看【案例-普通维度-数据权限】。
- 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数据集,则加载对应的业务表数据,实现数据权限控制功能。
序号 登录变量 登录名称 格式 1 loginId登录ID $loginId$2 loginName登录名称 $loginName$3 isSa是否管理员 $isSa$4 orgId机构ID $orgId$5 orgName机构名称 $orgName$6 postId岗位ID $postId$7 postName岗位名称 $postName$8 userId用户ID $userId$9 userName用户名称 $userName$10 accountId账号ID $accountId$11 accountName账号名称 $accountName$12 isLogined是否已经登录 $isLogined$13 postType岗位类型 $postType$14 belongOrgId管理机构id $belongOrgId$15 isToopOrgManager是否顶级机构管理员 $isToopOrgManager$16 userNo用户工号 $userNo$17 postCode岗位编码 $postCode$18 orgNo机构编码 $orgNo$19 bizOrgId当前管理单元机构Id $bizOrgId$数据权限配置说明:
- SQL语句格式:select 控制字段 from 控制表 where 控制条件。
- SQL返回查询列必须只能定义一列,用于对应需过滤业务表的过滤字段。
- SQL语句中可使用登录变量,格式是:$登录变量编码$,例如$loginId$。登录变量来源于Vbase默认的以及登录时传入的附加属性,在执行时会将该变量的具体值替代该变量。例如:
select orgNo from vbase_organization.v_sys_org where orgId = $orgId$。
选择自定义过滤条件时,需要实现
vbase_prd_perm_api.SPI_PermDefinitionConditionFilterProvider构件EP方法,可以直接选择开发平台提供的方法。EP方法实现的返回值VSQLXML必须为完整的SQL语句格式,并且查询列只能定义一列,用于对应过滤业务表的过滤字段。
具体使用,请查看【案例-自定义过滤条件】。
EP实现配置说明:
选择模块信息后,点击新增按钮,在【新增数据权限配置】窗体中,填写权限点名称、权限点编码等相关信息。
注意:新增数据权限之前,需要先将需要过滤的业务表,在待选表管理中选择;同样过滤字段,需要在待选表字段管理中设置。
对于多个业务表都使用相同的过滤条件字段,支持批量定义权限点并自动生成数据权限,可以更快捷的定义、维护数据权限点,提升配置的效率。
(1)批量添加数据权限配置
注意:选择多个过滤的业务表后,对应的过滤字段,应该在选择的业务表中同样存在,且编码一致。
(2)批量编辑数据权限
点击【下一步】按钮,选择批量编辑的数据权限。
(3)生成数据权限
点击【确定】按钮,生成对应的数据权限。
权限高级设置,主要是兼容旧版本的数据权限配置功能。
旧版本的数据权限,需要在开发平台定义数据权限维度,然后再结合执行平台配置数据权限。
目前,新的数据权限定义,只需要在执行平台配置数据权限即可,无需再开发平台配置,操作简单方便。
在数据权限定义中,提供了多字段关联方式设置。
业务表:执行系统配置了权限的业务表集合。
or方式连接:默认不勾选,可以按需勾选。
(1)业务表权限条件连接方式说明
定义数据权限,可以对同个业务表创建多个权限点。在具体查询时,对业务表的过滤方式是:
- 同业务表同一个字段下的多个条件SQL之间固定使用or方式相连,即同字段不同条件的并集。
- 同业务表不同字段之间的条件SQL除了默认以and交集方式相连外,也提供or并集的方式,可自行勾选。
注:这里仅可选择在执行系统配置了权限的业务表,在开发系统配置的业务表请在高级设置/权限控制管理中设置。
(2)业务表权限条件连接方式实例
- 权限点1
- 权限点2
- 权限点3
- 效果预览
3. 案例
以【项目管理】为例,在该案例的基础上,进行数据权限应用配置。
假设【项目列表】业务表数据如下:

- 1.待选表数据
- 2.待选表字段
- 3.数据权限定义
- 4.授权效果
在新增数据权限前,需要先选择对应模块待选表数据管理。
在本案例中,选择项目表作为待选表数据。
访问目录:配置中心 → 业务系统初始化配置 → 基础设置 → 待选数据 → 待选表管理
选择待选表之后,还需设置对应的待选表字段。
访问目录:配置中心 → 业务系统初始化配置 → 基础设置 → 待选数据 → 待选表字段管理
在数据权限定义中,定义项目表的普通权限,过滤字段为“
地区(district)”,过滤条件为district ='华北区'。访问目录:配置中心 → 业务系统初始化配置 → 权限设置 → 权限定义→ 数据权限定义
在本案例中,将 “普通权限-地区” 授权给所有人,在实际项目中可以根据需求,授权给不同用户。
用户登录服务后,只能查看"华北区"的相关项目数据。
(1)授权前
业务表定义数据权限后,未授权前,无法查看所有的业务数据:
同样,在开发平台中,也无法预览表数据:
(2)授权后
在本案例中,将 “普通权限-地区” 授权给所有人。
一般用户登陆服务后,可以查看“华北区”的相关业务数据。
info注意:设置机构数据权限的业务场景,一般要求业务表定义对应的机构ID字段,作为数据权限过滤的条件。
- 1.待选表数据
- 2.待选表字段
- 3.数据权限定义
- 4.授权效果
在新增数据权限前,需要先选择对应模块待选表数据管理。
在本案例中,选择项目表作为待选表数据。
访问目录:配置中心 → 业务系统初始化配置 → 基础设置 → 待选数据 → 待选表管理
)
选择待选表之后,还需设置对应的待选表字段。
访问目录:配置中心 → 业务系统初始化配置 → 基础设置 → 待选数据 → 待选表字段管理
在数据权限定义中,定义项目表的机构权限,过滤字段为“
所属机构Id(orgId)”,过滤条件为本下。访问目录:配置中心 → 业务系统初始化配置 → 权限设置 → 权限定义→ 数据权限定义
针对机构权限过滤策略含义本:指具有同级的数据权限,如B机构下的用户仅具有B机构的数据权限;
本下:指具有同级和下级的数据权限,如B机构下的用户具有B机构数据权限的同时,也拥有C机构的数据权限;
本上:指同级和上级,如B机构下的用户具有B机构数据权限的同时,也拥有A机构的数据权限。
(1)人员机构信息
在本案例中,机构人员结构如下:
(2)授权前
业务表定义数据权限后,未授权前,无法查看所有的业务数据:
同样,在开发平台中,也无法预览表数据:
(3)授权后
在本案例中,将 “数据权限-本上” 授权给所有人,在实际项目中可以根据需求,授权给不同用户。
“王五”用户登录服务,可以访问的业务数据如下:
- 1.添加引用
- 2.方法扩展实现
- 3.数据权限定义
- 4.授权效果
由于自定义过滤条件,需要结合实现
vbase_prd_perm_api.SPI_PermDefinitionConditionFilterProvider构件EP方法。因此,在应用构件中,需要添加
vbase_prd_perm_api(vbase_产品化权限API)引用构件。
在构件方法中,添加方法扩展实现
EP_PermDefinitionConditionFilterProvider(自定义过滤条件查找器)。
(1)方法输入
编码 名称 类型 初始值 描述 filterTable需要过滤业务表 文本 值来源于在配置中心定义数权限时,设置的需要过滤业务表 filterTableField过滤字段 文本 值来源于在配置中心定义数权限时,设置的过滤字段 (2)方法输出
编码 名称 类型 初始值 描述 VSQLXMLVSQL权限过滤条件 长文本 值输出给在配置中心定义数权限时,对应的sql过滤条件 (3)规则配置
(4)构件服务映射
在数据权限定义时,选择 “自定义过滤条件” 策略类型,依次设置需要过滤的业务表、过滤字段和自定义过滤条件等。
(1)授权前
业务表定义数据权限后,未授权前,无法查看所有的业务数据:
同样,在开发平台中,也无法预览表数据:
(2)授权后
在本案例中,将 “数据权限-本上” 授权给所有人,在实际项目中可以根据需求,授权给不同用户。
“王五”用户登录服务,可以访问的业务数据如下:
































