Zum Hauptinhalt springen

RBAC with Pattern

Schnellstart

  • Verwenden Sie das Muster in g(_, _).

    e, _ := NewEnforcer("./example.conf", "./example.csv")
    e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Verwenden Sie das Muster mit Domain.

    e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Verwenden Sie alle Muster.

    Kombinieren Sie einfach die Verwendung beider APIs.

Wie oben gezeigt, müssen Sie nach dem Erstellen der enforcer-Instanz das Musterabgleich über die APIs AddNamedMatchingFunc und AddNamedDomainMatchingFunc aktivieren, die bestimmen, wie das Muster abgeglichen wird.

notiz

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

Verwenden Sie Musterabgleich in RBAC

Manchmal möchten Sie, dass bestimmte Subjekte, Objekte oder Domains/Mandanten mit einem bestimmten Muster automatisch eine Rolle zugewiesen bekommen. Musterabgleichsfunktionen in RBAC können Ihnen dabei helfen. Eine Musterabgleichsfunktion teilt die gleichen Parameter und Rückgabewert wie die vorherige Matcher-Funktion.

Die Musterabgleichsfunktion unterstützt jeden Parameter von g.

Wir wissen, dass RBAC normalerweise als g(r.sub, p.sub) in einem Matcher ausgedrückt wird. Dann können wir eine Richtlinie wie folgt verwenden:

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

So kann alice alle Bücher einschließlich book 1 und book 2 lesen. Aber es kann Tausende von Büchern geben, und es ist sehr mühsam, jedes Buch zur Buchrolle (oder Gruppe) mit einer g-Richtlinienregel hinzuzufügen.

Mit Musterabgleichsfunktionen können Sie die Richtlinie jedoch mit nur einer Zeile schreiben:

g, /book/:id, book_group

Casbin wird automatisch /book/1 und /book/2 in das Muster /book/:id für Sie abgleichen. Sie müssen die Funktion nur mit dem Enforcer registrieren wie:

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

Wenn Sie eine Musterabgleichsfunktion in Domains/Mandanten verwenden, müssen Sie die Funktion mit dem Enforcer und Modell registrieren.

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. Kurz gesagt, g(r.sub, p.sub, r.dom) überprüft, ob der Benutzer r.sub eine Rolle p.sub in der Domain r.dom hat. So funktioniert der Matcher. Das vollständige Beispiel finden Sie hier.

Neben der oben genannten Musterabgleichssyntax können wir auch reines Domain-Muster verwenden.

Zum Beispiel, wenn wir möchten, dass sub Zugriff in verschiedenen Domains hat, domain1 und domain2, können wir das reine Domain-Muster verwenden:

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 diesem Beispiel möchten wir, dass alice data in domain1 und domain2 lesen und schreiben kann. Musterabgleich * in g ermöglicht alice Zugriff auf zwei 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.