本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
範例 4:使用 OPA 和 Rego 進行 UI 篩選
OPA 和 Rego 的彈性支援篩選 UI 元素的能力。下列範例示範 OPA 部分規則如何針對 RBAC 的 UI 中應顯示的元素進行授權決策。此方法是使用 OPA 篩選 UI 元素的許多不同方法之一。

在此範例中,單一頁面 Web 應用程式有四個按鈕。假設您想要篩選 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
和 viewData
。因此,Bob (以及具有檢視器角色的任何其他使用者) 此規則的輸出如下所示:
{ "user_permissions": [ "viewData", "viewUsers" ] }
具有 dataViewOnly
角色的 Shirley 輸出會包含許可按鈕:viewData
。具有 admin
角色的 Alice 輸出將包含所有這些許可。查詢 OPA 時,這些回應會傳回 UIuser_permissions
。然後,應用程式可以使用此回應來隱藏或顯示 viewUsersButton
、updateUsersButton
、 viewDataButton
和 updateDataButton
。