本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
範例 3:具有 OPA 和 Rego 的 RBAC 和 ABAC 的多租戶存取控制
若要增強上一節中的 RBAC 範例,您可以將屬性新增至使用者。
此範例包含上一個範例中的相同角色,但會新增使用者屬性 account_lockout_flag。這是未與任何特定角色相關聯的使用者特定屬性。您可以使用先前用於此範例的相同 RBAC 外部資料:
{ "roles": { "tenant_a": { "all_access_role": ["viewData", "updateData"] }, "tenant_b": { "update_data_role": ["updateData"], "view_data_role": ["viewData"] } } }
account_lockout_flag 使用者屬性可做為使用者 Bob /viewData/tenant_a的 OPA 查詢輸入的一部分傳遞至資料服務:
{ "tenant_id": "tenant_a", "role": "all_access_role", "path": ["viewData", "tenant_a"], "method": "GET", "account_lockout_flag": "true" }
查詢存取決策的規則類似於上述範例,但包含要檢查account_lockout_flag屬性的額外行:
default allowViewData = false allowViewData = true { input.method == "GET" input.path = ["viewData", tenant_id] input.tenant_id == tenant_id role_permissions := data.roles[input.tenant_id][input.role][_] contains(role_permissions, "viewData") input.account_lockout_flag == "false" }
此查詢會傳回 的授權決策false。這是因為 account_lockout_flag attributetrue適用於 Bob,而 Rego 規則allowViewData拒絕存取,雖然 Bob 具有正確的角色和租用戶。