编制和测试成员资格查询
本文档介绍如何编制和测试成员资格查询以确保返回正确的用户。
准备工作
在继续此页面的信息之前,请先执行以下任务:
阅读 Groups API 概览。
阅读动态群组概览。
编制和测试查询
成员资格查询采用 target_field condition
形式,格式设置为通用表达式语言 (CEL) 表达式。 如需查看可以使用的 User
资源字段列表,请参阅动态群组的有效用户特性。
查询示例
以下示例展示了如何使用 exists()
CEL 函数检查 user.addresses
字段中的特定值:
user.addresses.exists(ad, ad.locality=='Sunnyvale')
exists()
宏用于为列表类型的字段创建成员查询。
以下示例展示了在单个列表条目中检查多个值,即(建筑物)area
和 building_id
:
user.locations.exists(loc, loc.area=='Sunnyvale' && loc.building_id=='Building 1')
以下示例展示了如何查找属于给定单位部门的用户:
- 给定单位部门下的所有直接用户:
user.org_unit_id==orgUnitId('03ph8a2z1enx4lx')
- 给定单位部门下的所有直接和间接用户:
user.org_units.exists(org_unit, org_unit.org_unit_id==orgUnitId('03ph8a2z1khexns'))
user.name.value.equalsIgnoreCase('jOhn DoE')`
查询中的否定运算
您可以在成员资格查询中使用 NOT !
运算符来排除具有特定属性的用户。下面是一些示例:
不属于给定组织部门的所有用户:
!(user.org_unit_id==orgUnitId('03ph8a2z1enx4lx'))
不属于
Marketing
组织的所有用户:!user.organization.exists(org, org.title = "Marketing")
不支持 NOT !
运算符与 exists()
宏的某些组合:
任何使用
exists()
宏并在其中使用 AND&&
运算符的 NOT!
查询:!user.organization.exists(org, (org.title == "Cloud" && org.department == "Sales"))
任何使用
exists()
宏并包含 NOT!
运算符的查询:user.organization.exists(org, (org.title == "Cloud" || !(org.department == "Sales")))
测试成员资格查询
要测试成员资格查询,您可以使用简单查询构建器。 该构建器允许您使用下拉菜单和文本字段输入和测试查询。确定成员资格查询返回正确的结果后,您可以使用 Groups API 创建相应的 CEL 查询。
自定义用户属性
只要自定义架构在 user.custom_schemas
中已存在,就可以在动态群组查询中使用自定义用户属性,但简单的查询构建器下拉菜单中不支持自定义用户属性。要测试针对自定义用户属性的查询,请使用 CEL 查询格式直接在输入 CEL 查询文本框中输入查询条件。自定义架构示例如下所示:
{
"schemaName": "employmentData",
"fields": [
{
"fieldName": "EmployeeNumber",
"fieldType": "STRING",
"multiValued": "false"
},
{
"fieldName": "JobFamily",
"fieldType": "STRING",
"multiValued": "true"
}
]
}
单值字段
user.custom_schemas.employmentData.EmployeeNumber == 'value'
多值字段
user.custom_schemas.employmentData.JobFamily.exists(fld, fld == 'value')
后续步骤
测试成员资格查询后,您可以在创建群组时使用该查询。如需了解详情,请参阅创建动态群组。