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
Untuk meningkatkan contoh RBAC di bagian sebelumnya, Anda dapat menambahkan atribut ke pengguna.
Contoh ini mencakup peran yang sama dari contoh sebelumnya, tetapi menambahkan atribut penggunaaccount_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