

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Contoh 3: Kontrol akses multi-tenant untuk RBAC dan ABAC dengan OPA dan Rego
<a name="opa-abac-rbac-examples"></a>

Untuk meningkatkan contoh RBAC di bagian sebelumnya, Anda dapat menambahkan atribut ke pengguna. 

![RBAC dan ABAC dengan OPA dan Rego](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/opa-example-3.png)


Contoh ini mencakup peran yang sama dari contoh sebelumnya, tetapi menambahkan atribut pengguna`account_lockout_flag`. Ini adalah atribut khusus pengguna yang tidak terkait dengan peran tertentu. Anda dapat menggunakan data eksternal RBAC yang sama dengan yang Anda gunakan sebelumnya untuk contoh ini: 

```
 {
    "roles": {
        "tenant_a": {
            "all_access_role": ["viewData", "updateData"]
        },
        "tenant_b": {
            "update_data_role": ["updateData"],
            "view_data_role": ["viewData"]
        }
    }
}
```

Atribut `account_lockout_flag` pengguna dapat diteruskan ke layanan Data sebagai bagian dari input ke kueri OPA `/viewData/tenant_a` untuk pengguna Bob:

```
 {
    "tenant_id": "tenant_a",
    "role": "all_access_role",
    "path": ["viewData", "tenant_a"],
    "method": "GET",
    "account_lockout_flag": "true"
}
```

Aturan yang ditanyakan untuk keputusan akses mirip dengan contoh sebelumnya, tetapi menyertakan baris tambahan untuk memeriksa `account_lockout_flag` atribut:

```
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"
}
```

Query ini mengembalikan keputusan otorisasi. `false` Ini karena `true` untuk Bob, dan aturan Rego `allowViewData` menolak akses meskipun Bob memiliki peran dan penyewa yang benar. `account_lockout_flag attribute`