编制和测试成员资格查询

本文档介绍如何编制和测试成员资格查询以确保返回正确的用户。

准备工作

在继续此页面的信息之前,请先执行以下任务:

编制和测试查询

成员资格查询采用 target_field condition 形式,格式设置为通用表达式语言 (CEL) 表达式。 如需查看可以使用的 User 资源字段列表,请参阅动态群组的有效用户特性

查询示例

以下示例展示了如何使用 exists() CEL 函数检查 user.addresses 字段中的特定值:

user.addresses.exists(ad, ad.locality=='Sunnyvale')

exists() 宏用于为列表类型的字段创建成员查询。

以下示例展示了在单个列表条目中检查多个值,即(建筑物)areabuilding_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')

后续步骤

测试成员资格查询后,您可以在创建群组时使用该查询。如需了解详情,请参阅创建动态群组