Zum Hauptinhalt springen

RBAC mit Muster

Schnellstart

  • 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

Wenn Sie den Online-Editor verwenden, gibt er die Funktion Muster übereinstimmend in der unteren linken Ecke an. editor-tips

Verwende Musterpassung in RBAC

Sometimes, you want certain subjects, objects, or domains/tenants with a specific pattern to be automatically granted a role. Dabei helfen Ihnen die Funktionen zum Musterabgleich in RBAC. Eine Funktion teilt die gleichen Parameter und den Rückgabewert wie die vorherige Trefferfunktion.

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

Alice kann also alle Bücher lesen, einschließlich Buch 1 und Buch 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.

Aber mit den Pattern-passenden Funktionen können Sie die Richtlinie mit nur einer Zeile schreiben:

g, /book/:id, book_group

Casbin will automatically match /book/1 and /book/2 into the pattern /book/:id for you. Sie müssen die Funktion nur beim Vollstrecker registrieren, wie:

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)

Wenn Sie nicht verstehen, was g(r.sub, p.sub, r.dom) bedeutet, lesen Sie bitte rbac-with-domains. Kurzum, g(r.sub, p.sub, r.dom) wird prüfen, ob der Benutzer r. ub hat eine Rolle p.sub in der Domäne r.dom. So this is how the matcher works. Sie können das komplette Beispiel hier sehen.

Neben der obigen Pattern-Matching-Syntax können wir auch reine Domain-Muster verwenden.

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.