Zum Hauptinhalt springen

So funktioniert es

In Casbin wird ein Zugriffskontrollmodell in eine CONF-Datei abstrahiert, basierend auf der PERM-Metamodel (Policy, Effect, Request, Matchers). Das Umschalten oder Aktualisieren des Autorisierungsmechanismus f√ľr ein Projekt ist daher genauso einfach wie das √Ąndern einer Konfiguration. Sie k√∂nnen Ihr eigenes Zugangskontrollmodell anpassen, indem Sie die verf√ľgbaren Modelle kombinieren. Zum Beispiel k√∂nnen RBAC-Rollen und ABAC-Attribute in einem Modell kombiniert werden und eine Reihe von Richtlinien-Regeln gemeinsam genutzt werden.

Das PERM-Modell besteht aus vier Stiftungen (Policy, Effect, Request, Matchers), die die Beziehung zwischen Ressourcen und Nutzern beschreiben.

Anfrage‚Äč

Definieren Sie die Abfrageparameter. Eine grundlegende Anfrage ist ein Tuple-Objekt, das mindestens einen Betreff (zugegriffene Entität), Objekt (aufgerufene Ressource) und Aktion (Zugriffsmethode) benötigt

Zum Beispiel kann eine Anfragedefinition so aussehen: r={sub,obj,act}

Er definiert den Namen und die Reihenfolge der Parameter, die wir f√ľr die Zugriffskontrolle zur Verf√ľgung stellen sollten.

Richtlinien‚Äč

Definieren Sie das Modell der Zugriffsstrategie. Tatsächlich definiert er den Namen und die Reihenfolge der Felder im Richtlinien-Regeldokument.

Zum Beispiel: p={sub, obj, act} oder p={sub, obj, act, eft}

Hinweis: Wenn eft (Richtlinienergebnis) nicht definiert ist, wird das Ergebnisfeld in der Richtlinien-Datei nicht gelesen, und das √ľbereinstimmende Ergebnis wird standardm√§√üig erlaubt.

Matcher‚Äč

Passende Regeln f√ľr Anfrage und Richtlinie.

Beispiel: m = r.sub == p.sub && r.act == p.act && r.obj == p. bj Diese einfache und gemeinsame Regel bedeutet, dass wenn die angeforderten Parameter (Entit√§ten, -Resourcen und -Methoden) sind gleich, das hei√üt, wenn sie in der Richtlinie gefunden werden k√∂nnen, dann das Endergebnis (p. ft) wird zur√ľckgegeben. Das Ergebnis der Strategie wird in p.eft gespeichert.

Effekt‚Äč

Es kann als Modell verstanden werden, in dem ein logisches Kombinationsurteil erneut √ľber die √ľbereinstimmenden Ergebnisse von Matchern durchgef√ľhrt wird.

Zum Beispiel: e = irgendwe(wo(p.eft == erlaubt))

Dieser Satz bedeutet, dass, wenn das √ľbereinstimmende Strategieergebnis p.eft das Ergebnis von (einige) erlaubt, das Endergebnis wahr ist

Werfen wir einen Blick auf ein anderes Beispiel: e = some(where (p.eft == allow)) && !some(where (p. ft == deny)) Die logische Bedeutung dieser Beispiel-Kombination ist: Wenn es eine Strategie gibt, die mit dem Ergebnis der Erlaubnis √ľbereinstimmt, und keine Strategie, die mit dem Ergebnis der Ablehnung √ľbereinstimmt, das Ergebnis ist wahr. Mit anderen Worten, es ist wahr, wenn alle √ľbereinstimmenden Strategien erlaubt sind, wenn es leugnet wird. beide sind falsch (einfacher, wenn gleichzeitig erlaubt und verweigert wird, wird verweigert)

Das einfachste und einfachste Modell in Casbin ist ACL. ACL's Modell CONF ist:

# Anforderungsdefinition
[request_definition]
r = sub, obj, act

# Richtlinien-Definition
[policy_definition]
p = sub, obj, act

# Policy-Effekt
[policy_effect]
e = some(where (p. ft == allow))

# Matcher
[matchers]
m = r. ub == p.sub && r.obj == p.obj && r.act == p.act

Eine Beispielrichtlinie f√ľr das ACL-Modell ist wie folgt:

p, alice, data1, lesen
p, bob, data2, schreiben

Es bedeutet:

  • alice kann Daten 1 lesen
  • bob kann Daten 2 schreiben

Wir unterst√ľtzen auch den Mehrzeiligen-Modus durch Anh√§ngen von '\' am Ende:

# Matcher
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act

Au√üerdem, wenn Sie ABAC verwenden, Sie k√∂nnen Operator in probieren, wie folgt in Casbin golang Edition (jCasbin und Node-Casbin werden noch nicht unterst√ľtzt):

# Matcher
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')

Aber Sie SHOULD stellen sicher, dass die L√§nge des Arrays MEHR als 1ist, andernfalls wird es zu Panik f√ľhren.

F√ľr mehr Operatoren k√∂nnen Sie einen Blick auf werfen