MOU数据权限组件
MOU数据权限组件(Mou)用于为后续的数据查询组件开启 MOU 数据权限过滤。
本文档是 平台接口 概念的具体配置说明。建议先阅读平台接口概念,了解整体架构。
概述
MOU数据权限组件用于限定后续数据查询的数据范围,属于行级过滤(行级数据权限、权限过滤)能力。开启后,该组件之后的所有数据查询操作都会启用 MOU 数据权限过滤,可有效实现数据隔离与动态权限控制。
本组件作用于接口编排链路,按接口节点逐个配置;对象设置中还有一份对象数据权限(对象级 MOU 配置),两者同时生效时以本组件为准。参见 MOU 数据权限(对象)。
配置项
| 配置项 | 说明 |
|---|---|
| 开启MOU数据权限过滤 | 开启后,该组件后续的所有数据查询操作将启用MOU数据权限过滤 |
| 权限模式 | 数据权限过滤模式,开启后必填,缺省为「系统默认」 |
| 操作对象 | 权限模式为「某人员字段值」类时配置,指定后续操作的数据对象,必填 |
| 匹配字段 | 权限模式为「某人员字段值」类时配置,指定用于与当前登录人比对的人员字段,必填 |
权限模式取值
| 界面名称 | 值(MouType) | 说明 |
|---|---|---|
| 系统默认(基于组织架构+数据权限) | 0 | 用户所在组织 + 用户所在组织的所有下级组织 + 用户作为组织负责人的组织及下级组织 + 用户拥有身份配置的 MOU 组织,缺省值 |
| 当前登录人创建的数据 | 1 | 仅返回当前登录人创建的数据 |
| 当前登录人编辑的数据 | 2 | 仅返回当前登录人编辑的数据 |
| 当前登录人创建或编辑的数据 | 3 | 仅返回当前登录人创建或编辑的数据 |
| 当前登录人所在组织的数据 | 10 | 仅返回当前登录人所在组织的数据 |
| 某人员字段值=当前登录人的数据 | 40 | 数据中某人员字段值等于当前登录人 |
| 某人员多选字段值包含当前登录人的数据 | 41 | 数据中某人员多选字段包含当前登录人 |
「操作对象」与「匹配字段」仅在权限模式为 40 / 41 时显示,「匹配字段」的可选项限定为该操作对象中的人员类型字段。
使用说明
- 该组件一般搭配其他查询组件使用,用于限定后续组件的数据查询范围
- 该组件的优先级高于对象中的 MOU 数据权限配置
使用场景
- 动态权限控制
- 数据隔离
- 敏感数据保护
下一步
- 发起审批流 - 发起审批
属性明细
以下内容面向技术实现与 AI 检索,说明 MOU数据权限组件的节点元数据。
节点元数据
MOU数据权限组件由 FlowCmpType.Mou 标识:
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
type | string | 组件类型 | 固定为 "Mou" |
Enable | string(bool) | 是否开启数据权限过滤 | "true"(缺省)/ "false" |
MouType | string | 权限模式 | "0" / "1" / "2" / "3" / "10" / "40" / "41",缺省 "0" |
MetaObjectId | string(GUID) | 操作对象 | MouType 为 "40" / "41" 时使用 |
Field | string | 匹配字段 | MouType 为 "40" / "41" 时使用,人员类型字段 |
order | string | 同级排序 | 例:"4" |
元数据存储示例
{
"ID": "mou1",
"type": "Mou",
"Enable": "true",
"MouType": "40",
"MetaObjectId": "3f9c0b2e-2d3a-4e6f-9c11-0f7a5b8d2e10",
"Field": "owner",
"order": "4"
}
数据源
「操作对象」与「匹配字段」下拉分别通过 POST /api/DataSource/GetMetaObjectDataSource、POST /api/DataSource/GetMetaFieldDataSource 获取。
服务端执行逻辑
MOU 数据权限组件由 MouComponentManager(继承 InterfaceComponentManagerBase)实现,组件类型为 FlowComponentTypeEnum.Mou。
节点
meta中的所有值均以字符串存储,服务端统一通过SafeGet("Key")读取字符串。
执行时机与场景
组件读取配置后,把 MOU 过滤条件注入上下文,供其后的数据查询类组 件使用。
输入参数(meta 键)
| 键 | 读取方式 | 含义 |
|---|---|---|
Enable | meta.SafeGet("Enable") | 是否开启,必须能解析为 bool |
MouType | meta.SafeGet("MouType") ?? "0" | 权限模式 |
MetaObjectId | meta.SafeGet("MetaObjectId") | MouType 为 40 / 41 时的操作对象 |
Field | meta.SafeGet("Field") | MouType 为 40 / 41 时的匹配字段 |
执行步骤
Enable无法解析为bool时抛出异常。- 写入
context.MouEnabled = enableB。 - 开启时调用
permissionService.GetMouFilterAsync(mouType, field, null)(第三个参数mouInterfaceId本组件传null)得到过滤条件,赋给context.MouFilter。 - 调用
ExecuteNextAsync继续下游。
GetMouFilterAsync 按 MouType 构造 DynamicFilter:
MouType | 过滤条件 |
|---|---|
1 | createdby = 当前登录人 |
2 | modifiedby = 当前登录人 |
3 | createdby = 当前登录人 OR modifiedby = 当前登录人 |
10 | organization = 当前登录人所在组织 |
40 | Field = 当前登录人 |
41 | Field 包含 当前登录人 |
50 | Field in 自定义数据权限接口返回值(本组件不传接口 Id,界面亦不提供此模式) |
60 | _id = 不存在的 Id(禁止查询) |
0 / 默认 | 基于组织架构(当前用户为根组织时不过滤) |
输出与上下文
| 字段 | 说明 |
|---|---|
context.MouEnabled | bool?,是否启用 MOU 过滤 |
context.MouFilter | DynamicFilter,供下游数据查询组件按 AND 组合使用 |
该组件设置的 MOU 过滤优先级高于实体对象上的默认 MOU 配置。
权限、安全与限制
- 组件自身不做操作权限校验;基类提供
GetSkipMouPermission(读取DicParam中的跳过标记)与GetSkipOperationPermission(读取 meta 或DicParam中的跳过标记)。 MouType为40/41时,匹配字段界面限定为人员类型字段。
异常与校验
Enable非法:MOU 开关字段设置错误。MouType为40/41且MetaObjectId为空:操作对象未找到;对象不存在:按 Id 未找到对象。MouType为40/41且Field为空:匹配字段设置错误。
检索关键词与相关概念
本组件在平台中也称为:组件级 MOU 数据权限、接口级数据权限、行级数据权限、行级过滤、权限过滤、数据权限过滤、数据范围限定。相关概念包括数据隔离、动态权限控制、组织架构权限与 MOU 过滤条件(MouFilter)。
对象维度的同类配置见 MOU 数据权限(对象)。