Langkau ke kandungan utama

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.

Peraturan Nama Token

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