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.
Si vous utilisez l'éditeur en ligne, il spécifie la fonction de correspondance de motifs dans le coin inférieur gauche.
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 :
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
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.
- Go
- Node.js
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
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.