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