Ir al contenido principal

RBAC with Domains

Definición de Rol con Inquilinos de Dominio

Los roles RBAC en Casbin pueden ser globales o específicos de un dominio. Roles específicos de dominio significan que los roles para un usuario pueden ser diferentes cuando el usuario está en diferentes dominios/inquilinos. Esto es muy útil para sistemas grandes como una nube, ya que los usuarios suelen estar en diferentes inquilinos.

La definición de rol con dominios/inquilinos debería verse así:

[role_definition]
g = _, _, _

El tercer _ representa el nombre del dominio/inquilino, y esta parte no debe ser cambiada. Entonces la política puede ser:

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

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

Esto significa que el rol de admin en tenant1 puede leer data1. Y alice tiene el rol de admin en tenant1 y el rol de user en tenant2. Por lo tanto, ella puede leer data1. Sin embargo, dado que alice no es admin en tenant2, no puede leer data2.

Entonces, en un comparador, deberías verificar el rol de la siguiente manera:

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

Por favor, consulte el rbac_with_domains_model.conf para ejemplos.

Convención de Nombres de Tokens

Nota: Convencionalmente, el nombre del token de dominio en la definición de política es dom y se coloca como el segundo token (sub, dom, obj, act). Ahora, Golang Casbin soporta nombres de tokens personalizados y su colocación. Si el nombre del token de dominio es dom, el token de dominio puede colocarse en una posición arbitraria sin ninguna acción adicional. Si el nombre del token de dominio no es dom, se debe llamar a e.SetFieldIndex() para constant.DomainIndex después de que el ejecutor esté inicializado, independientemente de su posición.

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