Lewati ke konten utama

RBAC with Domains

Definisi Peran dengan Penyewa Domain

Peran RBAC di Casbin bisa global atau spesifik domain. Peran spesifik domain berarti peran untuk pengguna bisa berbeda ketika pengguna berada di domain/penyewa yang berbeda. Ini sangat berguna untuk sistem besar seperti cloud, karena pengguna biasanya berada di penyewa yang berbeda.

Definisi peran dengan domain/penyewa seharusnya terlihat seperti ini:

[role_definition]
g = _, _, _

Yang ketiga _ mewakili nama domain/penyewa, dan bagian ini tidak boleh diubah. Kemudian kebijakan bisa menjadi:

p, admin, tenant1, data1, read
p, admin, tenant2, data2, read

g, alice, admin, tenant1
g, alice, user, tenant2

Ini berarti bahwa peran admin di tenant1 dapat membaca data1. Dan alice memiliki peran admin di tenant1 serta peran user di tenant2. Oleh karena itu, dia dapat membaca data1. Namun, karena alice bukan seorang admin di tenant2, dia tidak dapat membaca data2.

Kemudian, dalam sebuah matcher, Anda harus memeriksa peran sebagai berikut:

[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act

Silakan merujuk ke rbac_with_domains_model.conf untuk contoh.

Konvensi Nama Token

Catatan: Secara konvensional, nama token domain dalam definisi kebijakan adalah dom dan ditempatkan sebagai token kedua (sub, dom, obj, act). Sekarang, Golang Casbin mendukung nama token dan penempatan kustom. Jika nama token domain adalah dom, token domain dapat ditempatkan di posisi mana pun tanpa tindakan tambahan. Jika nama token domain bukan dom, e.SetFieldIndex() untuk constant.DomainIndex harus dipanggil setelah enforcer diinisialisasi, terlepas dari posisinya.

# `domain` here for `dom`
[policy_definition]
p = sub, obj, act, domain
e.SetFieldIndex("p", constant.DomainIndex, 3) // index starts from 0
users := e.GetAllUsersByDomain("domain1") // without SetFieldIndex, it will raise an error