RBAC with Pattern
Guida rapida
Utilizza il pattern in
g(_, _)
.e, _ := NewEnforcer("./example.conf", "./example.csv")
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)Utilizza il pattern con dominio.
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
Utilizza tutti i pattern.
Basta combinare l'uso di entrambe le API.
Come mostrato sopra, dopo aver creato l'istanza di enforcer
, è necessario attivare la corrispondenza dei pattern tramite le API AddNamedMatchingFunc
e AddNamedDomainMatchingFunc
, che determinano come avviene la corrispondenza del pattern.
Se utilizzi l'editor online, specifica la funzione di corrispondenza dei pattern nell'angolo in basso a sinistra.
Utilizza la corrispondenza dei pattern in RBAC
A volte, desideri che determinati soggetti, oggetti o domini/tenant con un pattern specifico vengano automaticamente concessi a un ruolo. Le funzioni di corrispondenza dei pattern in RBAC possono aiutarti a farlo. Una funzione di corrispondenza dei pattern condivide gli stessi parametri e valore di ritorno della precedente funzione matcher.
La funzione di corrispondenza dei pattern supporta ciascun parametro di g
.
Sappiamo che normalmente RBAC è espresso come g(r.sub, p.sub)
in un matcher. Quindi possiamo utilizzare una politica come:
p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group
Così alice
può leggere tutti i libri, inclusi libro 1
e libro 2
. Ma possono esserci migliaia di libri, ed è molto noioso aggiungere ciascun libro al ruolo (o gruppo) dei libri con una regola di politica g
.
Ma con le funzioni di corrispondenza dei modelli, puoi scrivere la politica con una sola riga:
g, /book/:id, book_group
Casbin farà automaticamente corrispondere /book/1
e /book/2
al modello /book/:id
per te. Devi solo registrare la funzione con l'enforcer in questo modo:
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
Quando si utilizza una funzione di corrispondenza dei modelli nei domini/tenant, è necessario registrare la funzione con l'enforcer e il modello.
- Go
- Node.js
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
Se non capisci cosa significhi g(r.sub, p.sub, r.dom)
, per favore leggi rbac-with-domains. In breve, g(r.sub, p.sub, r.dom)
controllerà se l'utente r.sub
ha un ruolo p.sub
nel dominio r.dom
. Quindi questo è come funziona il matcher. Puoi vedere l'esempio completo qui.
Oltre alla sintassi di corrispondenza dei modelli sopra, possiamo anche utilizzare un modello di dominio puro.
Ad esempio, se vogliamo che sub
abbia accesso in diversi domini, domain1
e domain2
, possiamo utilizzare il pattern di dominio puro:
p, admin, domain1, data1, read
p, admin, domain1, data1, write
p, admin, domain2, data2, read
p, admin, domain2, data2, write
g, alice, admin, *
g, bob, admin, domain2
In questo esempio, vogliamo che alice
possa leggere e scrivere data
in domain1 e domain2. La corrispondenza del pattern *
in g
fa sì che alice
abbia accesso a due domini.
Utilizzando la corrispondenza di pattern, specialmente in scenari più complessi e che implicano molti domini o oggetti da considerare, possiamo implementare la policy_definition
in modo più elegante ed efficace.