Vai al contenuto principale

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.

nota

Se utilizzi l'editor online, specifica la funzione di corrispondenza dei pattern nell'angolo in basso a sinistra. suggerimenti-editor

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:

e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

Quando si utilizza una funzione di corrispondenza dei modelli nei domini/tenant, è necessario registrare la funzione con l'enforcer e il modello.

e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

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.