Vai al contenuto principale

RBAC with Domains

Definizione del Ruolo con Tenant di Dominio

I ruoli RBAC in Casbin possono essere globali o specifici del dominio. I ruoli specifici del dominio significano che i ruoli per un utente possono essere diversi quando l'utente si trova in diversi domini/tenant. Questo è molto utile per grandi sistemi come un cloud, poiché gli utenti sono solitamente in diversi tenant.

La definizione del ruolo con domini/tenant dovrebbe apparire così:

[role_definition]
g = _, _, _

Il terzo _ rappresenta il nome del dominio/tenant, e questa parte non dovrebbe essere cambiata. Quindi la politica può essere:

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

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

Ciò significa che il ruolo admin in tenant1 può leggere data1. E alice ha il ruolo admin in tenant1 e il ruolo user in tenant2. Pertanto, lei può leggere data1. Tuttavia, poiché alice non è un admin in tenant2, non può leggere data2.

Quindi, in un matcher, dovresti controllare il ruolo come segue:

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

Si prega di fare riferimento al rbac_with_domains_model.conf per esempi.

Convenzione del Nome del Token

Nota: Convenzionalmente, il nome del token del dominio nella definizione della politica è dom e viene posizionato come secondo token (sub, dom, obj, act). Ora, Golang Casbin supporta nomi di token personalizzati e posizionamento. Se il nome del token del dominio è dom, il token del dominio può essere posizionato in una posizione arbitraria senza alcuna azione aggiuntiva. Se il nome del token di dominio non è dom, e.SetFieldIndex() per constant.DomainIndex dovrebbe essere chiamato dopo l'inizializzazione dell'enforcer, indipendentemente dalla sua posizione.

# `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