数据权限
数据权限,主要是控制用户访问不同的业务数据的权限。
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)方法输出
编码 名称 类型 初始值 描述 VSQLXML
VSQL权限过滤条件 长文本 值输出给在配置中心定义数权限时,对应的sql过滤条件 (3)规则配置
(4)构件服务映射
在数据权限定义时,选择 “自定义过滤条件” 策略类型,依次设置需要过滤的业务表、过滤字段和自定义过滤条件等。
(1)授权前
业务表定义数据权限后,未授权前,无法查看所有的业务数据:
同样,在开发平台中,也无法预览表数据:
(2)授权后
在本案例中,将 “数据权限-本上” 授权给所有人,在实际项目中可以根据需求,授权给不同用户。
“王五”用户登录服务,可以访问的业务数据如下: