RBAC with Domains
Etki Alanı Kiracıları ile Rol Tanımı
Casbin'deki RBAC roller global ya da etki alanına özgü olabilir. Etki alanına özgü roller, bir kullanıcının farklı etki alanları/kiracılarda farklı rollerde olabileceği anlamına gelir. Bu, genellikle kullanıcıların farklı kiracılarda olduğu gibi büyük sistemler için çok kullanışlıdır.
Etki alanları/kiracılar ile rol tanımı şu şekilde görünmelidir:
[role_definition]
g = _, _, _
Üçüncü _
, etki alanı/kiracının adını temsil eder ve bu kısım değiştirilmemelidir. Ardından politika şu şekilde olabilir:
p, admin, tenant1, data1, read
p, admin, tenant2, data2, read
g, alice, admin, tenant1
g, alice, user, tenant2
Bu, tenant1
içindeki admin
rolünün data1
'i okuyabileceği anlamına gelir. Ve alice
, tenant1
içinde admin
rolüne ve tenant2
içinde user
rolüne sahiptir. Bu nedenle, data1
'i okuyabilir. Ancak, alice
tenant2
içinde admin
değil olduğu için, data2
'yi okuyamaz.
Ardından, bir eşleştiricide rolü şu şekilde kontrol etmelisiniz:
[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act
Örnekler için lütfen rbac_with_domains_model.conf dosyasına bakın.
Not: Geleneksel olarak, politika tanımındaki alan token adı dom
'dur ve ikinci token olarak yerleştirilir (sub, dom, obj, act
).
Şimdi, Golang Casbin özelleştirilmiş token adlarını ve yerleşimini desteklemektedir. Eğer alan token adı dom
ise, alan tokeni herhangi bir ek eylem olmadan rastgele bir konuma yerleştirilebilir. Eğer alan belirteç adı dom
değilse, e.SetFieldIndex()
metodu constant.DomainIndex
için zorlayıcı başlatıldıktan sonra, konumundan bağımsız olarak çağrılmalıdır.
# `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