翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
例 4: OPA と Rego による UI フィルタリング
OPA と Rego の柔軟性は、UI 要素をフィルタリングする機能をサポートします。次の例は、OPA 部分ルールが RBAC を使用して UI に表示する要素について承認を決定する方法を示しています。このメソッドは、OPA で UI 要素をフィルタリングできるさまざまな方法の 1 つです。

この例では、単一ページのウェブアプリケーションには 4 つのボタンがあります。Bob の 、Shirley の 、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
、、updateUsersButton
、および viewDataButton
を非表示または表示できますupdateDataButton
。