Passer au contenu principal

RBAC with Pattern

Démarrage rapide

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

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

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

    Il suffit de combiner l'utilisation des deux API.

Comme indiqué ci-dessus, après avoir créé l'instance enforcer, vous devez activer la correspondance de motifs via les API 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. editor-tips

Utilisez la correspondance de motifs dans RBAC

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

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

Nous savons que normalement RBAC est exprimé comme g(r.sub, p.sub) dans un matcher. Ensuite, nous pouvons utiliser une politique comme :

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

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

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

g, /book/:id, book_group

Casbin correspondra automatiquement /book/1 et /book/2 au motif /book/:id pour vous. Vous avez seulement besoin d'enregistrer la fonction avec l'exécuteur comme :

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. C'est donc ainsi que fonctionne le matcher. 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 qu'alice puisse lire et écrire data dans domain1 et domain2. La correspondance de motifs * dans g permet à alice d'avoir accès à deux domaines.

By using pattern matching, especially in scenarios that are more complicated and have a lot of domains or objects to consider, we can implement the policy_definition in a more elegant and effective way.