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.
Wenn Sie den Online-Editor verwenden, gibt er die Musterabgleichsfunktion in der unteren linken Ecke an.
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:
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
Wenn Sie eine Musterabgleichsfunktion in Domains/Mandanten verwenden, müssen Sie die Funktion mit dem Enforcer und Modell registrieren.
- Go
- Node.js
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
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.