Ana içeriğe atla

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.

Token Adı Kuralı

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