

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 例 4: OPA と Rego を使用した UI フィルタリング
<a name="opa-ui-filtering-examples"></a>

OPA と Rego の柔軟性は、UI 要素をフィルタリングする機能をサポートします。次の例は、OPA 部分ルールが RBAC を使用して UI に表示する要素について承認を決定する方法を示しています。このメソッドは、OPA で UI 要素をフィルタリングできるさまざまな方法の 1 つです。

![OPA と Rego による UI フィルタリング](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/opa-example-4.png)


この例では、単一ページのウェブアプリケーションには 4 つのボタンがあります。Bob の UI、Shirley の UI、Alice の UI をフィルタリングして、ロールに対応するボタンのみを表示するとします。UI はユーザーからリクエストを受信すると、OPA 部分ルールをクエリして、UI に表示するボタンを決定します。Bob (ロール `viewer`) が UI にリクエストを行うと、クエリは OPA に入力として以下を渡します。

```
{
    "role": "viewer"
}
```

OPA は、RBAC 用に構造化された外部データを使用してアクセスを決定します。

```
{
    "roles": {
        "viewer": ["viewUsers", "viewData"],
        "dataViewOnly": ["viewData"],
        "admin": ["viewUsers", "viewData", "updateUsers", "updateData"]
    }
}
```

OPA 部分ルールは、外部データと入力の両方を使用して、許可されたアクションのリストを生成します。

```
user_permissions[permissions] {
    permissions := data.roles[input.role][_]
}
```

部分ルールでは、OPA はクエリの一部として`input.role`指定された を使用して、表示するボタンを決定します。Bob にはロール があり`viewer`、外部データはビューワーに `viewUsers`と の 2 つのアクセス許可があることを指定します`viewData`。したがって、Bob (およびビューワーロールを持つ他のユーザー) のこのルールの出力は次のとおりです。

```
{
    "user_permissions": [
        "viewData",
        "viewUsers"
    ]
}
```

`dataViewOnly` ロールを持つ Shirley の出力には、アクセス許可ボタン が含まれます`viewData`。`admin` ロールを持つ Alice の出力には、これらのアクセス許可がすべて含まれます。これらのレスポンスは、OPA が に対してクエリされると UI に返されます`user_permissions`。その後、アプリケーションはこのレスポンスを使用して、`viewUsersButton`、、`viewDataButton``updateUsersButton`、および を非表示または表示できます`updateDataButton`。