Passer au contenu principal

RBAC avec motif

Démarrage rapide​

  • Use pattern in g(_, _).

    e, _ := NewEnforcer("./example.conf", "./example.csv")
    e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Use pattern with domain.

    e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Use all patterns.

    Just combine the use of both APIs.

As shown above, after you create the enforcer instance, you need to activate pattern matching via the AddNamedMatchingFunc and AddNamedDomainMatchingFunc APIs, which determine how the pattern matches.

note

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

Utiliser la correspondance de motif dans RBAC​

Sometimes, you want certain subjects, objects, or domains/tenants with a specific pattern to be automatically granted a role. Les fonctions de masquage dans RBAC peuvent vous aider à le faire. Une fonction de correspondance de patron partage les mêmes paramètres et la même valeur de retour que la fonction de recherche précédente.

The pattern matching function supports each parameter of g.

We know that normally RBAC is expressed as g(r.sub, p.sub) in a matcher. Then we can use a policy like:

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

Ainsi, alice peut lire tous les livres y compris le livre 1 et livre 2. But there can be thousands of books, and it's very tedious to add each book to the book role (or group) with one g policy rule.

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

g, /book/:id, book_group

Casbin will automatically match /book/1 and /book/2 into the pattern /book/:id for you. Vous devez seulement enregistrer la fonction avec le responsable comme :

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

When using a pattern matching function in domains/tenants, you need to register the function with the enforcer and model.

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

Si vous ne comprenez pas ce que signifie g(r.sub, p.sub, r.dom) , veuillez lire rbac-with-domains. En bref, g(r.sub, p.sub, r.dom) vérifiera si l'utilisateur r. ub a un rôle p.sub dans le domaine r.dom. So this is how the matcher works. Vous pouvez voir l'exemple complet ici.

En dehors de la syntaxe de masques correspondant à la syntaxe ci-dessus, nous pouvons également utiliser un motif de domaine pur.

For example, if we want sub to have access in different domains, domain1 and domain2, we can use the pure domain pattern:

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 this example, we want alice to read and write data in domain1 and domain2. Pattern matching * in g makes alice have access to two domains.

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.