

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

# 示例 5：使用已验证权限和 Cedar 进行用户界面筛选
<a name="avp-ui-filtering-examples"></a>

您还可以使用已验证的权限根据授权的操作对用户界面元素实施 RBAC 筛选。对于具有上下文敏感用户界面元素的应用程序来说，这非常有价值，这些元素可能与特定用户或租户相关联，如果是多租户 SaaS 应用程序。

在以下示例中`Users`，`Role``viewer`不允许执行更新。对于这些用户，用户界面不应呈现任何更新按钮。

![使用 Amazon 验证权限和 Cedar 进行用户界面筛选示例](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/avp-example-5.png)


在此示例中，单页 Web 应用程序有四个按钮。哪些按钮可见取决于当前登录应用程序的用户。`Role`在单页 Web 应用程序呈现 UI 时，它会查询 “已验证权限” 以确定用户有权执行哪些操作，然后根据授权决定生成按钮。

以下策略指定值为`Role`的类型`viewer`可以同时查看用户和数据。此策略的`ALLOW`授权决策需要`viewData`或`viewUsers`操作，还需要将资源与`Data`或类型相关联`Users`。`ALLOW`决定允许 UI 呈现两个按钮：`viewDataButton`和`viewUsersButton`。

```
permit (
    principal in GuiAPP::Role::"viewer",
    action in [GuiAPP::Action::"viewData", GuiAPP::Action::"viewUsers"],
    resource 
)
when {
   resource in [GuiAPP::Type::"Data", GuiAPP::Type::"Users"]
};
```

以下策略指定值为`Role`的类型`viewerDataOnly`只能查看数据。此策略的`ALLOW`授权决策需要`viewData`采取行动，还需要与该类型关联的资源`Data`。`ALLOW`决定允许 UI 呈现按钮`viewDataButton`。

```
permit (
    principal in GuiApp::Role::"viewerDataOnly",
    action in [GuiApp::Action::"viewData"],
    resource in [GuiApp::Type::"Data"] 
);
```

以下策略指定值为`Role`的类型`admin`可以编辑和查看数据和用户。此策略的`ALLOW`授权决策需要`updateData``updateUsers`、`viewData,`或的操作`viewUsers`，并且还需要将资源与`Data`或类型相关联`Users`。`ALLOW`决定允许 UI 呈现所有四个按钮：`updateDataButton``updateUsersButton`、`viewDataButton`、和`viewUsersButton`。

```
permit (
    principal in GuiApp::Role::"admin",
    action in [
        GuiApp::Action::"updateData",
        GuiApp::Action::"updateUsers",
        GuiApp::Action::"viewData", 
        GuiApp::Action::"viewUsers"
       ],
    resource 
)
when {
   resource in [GuiApp::Type::"Data", GuiApp::Type::"Users"]
};
```