RBAC with Domains
Definisi Peranan dengan Penyewa Domain
Peranan RBAC dalam Casbin boleh menjadi global atau khusus domain. Peranan khusus domain bermakna peranan untuk pengguna boleh berbeza apabila pengguna berada dalam domain/penyewa yang berbeza. Ini sangat berguna untuk sistem besar seperti awan, kerana pengguna biasanya berada dalam penyewa yang berbeza.
Definisi peranan dengan domain/penyewa haruslah kelihatan seperti ini:
[role_definition]
g = _, _, _
Yang ketiga _
mewakili nama domain/penyewa, dan bahagian ini tidak boleh diubah. Kemudian dasar boleh menjadi:
p, admin, tenant1, data1, read
p, admin, tenant2, data2, read
g, alice, admin, tenant1
g, alice, user, tenant2
Ini bermakna peranan admin
dalam tenant1
boleh membaca data1
. Dan alice
mempunyai peranan admin
dalam tenant1
dan peranan user
dalam tenant2
. Oleh itu, dia boleh membaca data1
. Namun, kerana alice
bukan admin
dalam tenant2
, dia tidak boleh membaca data2
.
Kemudian, dalam penapis, anda harus memeriksa peranan seperti berikut:
[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act
Sila rujuk kepada rbac_with_domains_model.conf untuk contoh-contoh.
Nota: Secara konvensional, nama token domain dalam definisi polisi adalah dom
dan diletakkan sebagai token kedua (sub, dom, obj, act
).
Sekarang, Golang Casbin menyokong nama token dan penempatan yang disesuaikan. Jika nama token domain adalah dom
, token domain boleh diletakkan di kedudukan sewenang-wenangnya tanpa sebarang tindakan tambahan. Jika nama token domain bukan dom
, e.SetFieldIndex()
untuk constant.DomainIndex
harus dipanggil selepas enforcer diinisialisasi, tanpa mengira kedudukannya.
# `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