

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Verified Access 策略逻辑短路
<a name="auth-policies-policy-eval-short-circ"></a>

您可能需要编写一个 AWS Verified Access 策略来评估给定上下文中可能存在也可能不存在的数据。如果在上下文中引用了不存在的数据，Cedar 将产生错误并将策略评估为“禁止访问”，无论您的意图如何。例如，这将导致“禁止”，因为 `fake_provider` 和 `bogus_key` 在此上下文中不存在。

```
permit(principal, action, resource) when {
  context.fake_provider.bogus_key > 42
};
```

为避免这种情况，您可以使用 `has` 运算符检查是否存在某个键。如果 `has` 运算符返回假，则对链接语句的进一步评估将停止，Cedar 在尝试引用不存在的项目时不会产生错误。

```
permit(principal, action, resource) when {
  context.identity.user has "some_key" && context.identity.user.some_key > 42
};
```

这在指定引用两个不同信任提供商的策略时最为有用。

```
permit(principal, action, resource) when {
  // user is in an allowed group
  context.aws_idc.groups has "c242c5b0-6081-1845-6fa8-6e0d9513c107"
  &&( 
    ( 
      // if CrowdStrike data is present, 
      // permit if CrowdStrike's overall assessment is over 50
      context has "crowdstrike" && context.crowdstrike.assessment.overall > 50
    )
    || 
    (
      // if Jamf data is present,
      // permit if Jamf's risk score is acceptable
      context has "jamf" && ["LOW", "NOT_APPLICABLE", "MEDIUM", "SECURE"].contains(context.jamf.risk) 
    )
  )
};
```