Passer au contenu principal

RBAC with Pattern

Démarrage Rapide

  • Utiliser le motif dans g(_, _).

    e, _ := NewEnforcer("./example.conf", "./example.csv")
    e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Utiliser le motif avec domaine.

    e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Utiliser tous les motifs.

    Il suffit de combiner l'utilisation des deux APIs.

Comme indiqué ci-dessus, après avoir créé l'instance enforcer, vous devez activer la correspondance de motifs via les APIs AddNamedMatchingFunc et AddNamedDomainMatchingFunc, qui déterminent comment le motif correspond.

note

Si vous utilisez l'éditeur en ligne, il spécifie la fonction de correspondance de motifs dans le coin inférieur gauche. conseils-éditeur

Utiliser la correspondance de motifs dans RBAC

Parfois, vous souhaitez que certains sujets, objets ou domaines/locataires avec un motif spécifique soient automatiquement attribués à un rôle. Les fonctions de correspondance de motifs dans RBAC peuvent vous aider à le faire. Une fonction de correspondance de motifs partage les mêmes paramètres et valeur de retour que la fonction de correspondance précédente matcher function.

La fonction de correspondance de motifs prend en charge chaque paramètre de g.

Nous savons qu'habituellement, RBAC est exprimé comme g(r.sur, p.sur) dans un matché. Ensuite, nous pouvons utiliser une politique comme :

p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group

Ainsi, alice peut lire tous les livres, y compris livre 1 et livre 2. Mais il peut y avoir des milliers de livres, et il est très fastidieux d'ajouter chaque livre au rôle (ou groupe) de livre avec une seule règle de politique `g'.

Mais avec les fonctions de correspondance de motifs, vous pouvez écrire la politique en une seule ligne :

g, /book/:id, book_group

Casbin fera automatiquement correspondre /book/1 et /book/2 au motif /book/:id pour vous. Vous devez simplement enregistrer la fonction avec l'exécuteur comme suit :

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

Lors de l'utilisation d'une fonction de correspondance de motifs dans les domaines/locataires, vous devez enregistrer la fonction avec l'exécuteur et le modèle.

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

Si vous ne comprenez pas ce que g(r.sub, p.sub, r.dom) signifie, veuillez lire rbac-with-domains. En bref, g(r.sub, p.sub, r.dom) vérifiera si l'utilisateur r.sub a un rôle p.sub dans le domaine r.dom. Voici donc comment fonctionne le comparateur. Vous pouvez voir l'exemple complet ici.

En plus de la syntaxe de correspondance de motifs ci-dessus, nous pouvons également utiliser un motif de domaine pur.

Par exemple, si nous voulons que sub ait accès dans différents domaines, domain1 et domain2, nous pouvons utiliser le motif de domaine pur :

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

Dans cet exemple, nous voulons que alice puisse lire et écrire data dans domain1 et domain2. La correspondance de motif * dans g permet à alice d'accéder à deux domaines.

En utilisant la correspondance de motifs, surtout dans des scénarios plus complexes et comportant de nombreux domaines ou objets à prendre en compte, nous pouvons mettre en œuvre la policy_definition de manière plus élégante et efficace.