[JAVA] Zugriffskontrollbibliothek Casbin Nutzungsübersicht

Zusammenfassung der Verwendung der Zugriffssteuerungsbibliothek (Casbin) (https://casbin.org/)

Modelldefinition

Casbin verwendet ein PERM-basiertes Zugriffssteuerungsmodell (Policy, Effect, Request, Matcher). Die Modelldefinition wird in der conf-Datei beschrieben, es müssen jedoch mindestens vier Abschnitte beschrieben werden: Richtliniendefinition, Richtlinieneffekt, Anforderungsdefinition und Matcher, die PERM entsprechen.

Access Control List (ACL)

Die Modelldefinitionsmethode von Casbin wird anhand der ACL Modelldefinition erläutert, die in Dateisystemen usw. als Betreff verwendet wird. (Referenz: Syntax für Modelle)

Request Definition

[request_definition]
r = sub, obj, act

[request_definition] definiert ein Modell zur Eingabe einer Zugriffsanforderung. Wie in der ACL-Modelldefinition werden in den meisten Fällen "sub" (Zugriffsausführender), "obj" (Zugriffsziel) und "act" (Zugriffsmethode) verwendet.

Policy Definition

[policy_definition]
p = sub, obj, act

[policy_definition] definiert das Richtlinienbeschreibungsformat. Wenn Sie in dieser Modelldefinition eine Richtlinie schreiben, die besagt, dass "file1 (obj)" von "user1 (sub)" gelesen (act) "gelesen werden kann", wird sie zu "p, user1, file1, read".

Matcher

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

[machers] definiert einen bedingten Ausdruck, der nach einer Richtlinie sucht, die der Zugriffsbeurteilungsanforderung entspricht. Zugriffsbeurteilungsanforderung r und Richtlinie p Beziehen Sie sich auf das in jeder[request_definition]with . definierte Modell und beschreiben Sie den bedingten Ausdruck.

In der ACL-Modelldefinition wird bestimmt, dass alle Zugriffsermittlungsanforderungen "sub" obj "act" mit der Übereinstimmungsrichtlinie übereinstimmen.

Policy Effect

[policy_effect]
e = some(where (p.eft == allow))

[policy_effect] definiert, wie eine Beurteilung vorgenommen werden soll, wenn mehrere Richtlinien mit der Anforderung der Zugriffsbeurteilung übereinstimmen.

Wenn in der ACL-Modelldefinition für eine der Richtlinien, die dem bedingten Matcher-Ausdruck entsprechen, "eft" auf "allow" ("some") gesetzt ist, wird die Berechtigung beurteilt.

Dieses "eft" ist ein Element, das in der Richtliniendefinition definiert wird, wenn eine Zugriffsverweigerungsrichtlinie (Blacklist) definiert wird. Wenn "eft" in der Richtliniendefinition nicht wie in der ACL-Modelldefinition definiert ist, wird angenommen, dass für "p.eft" "allow" festgelegt ist (Standardwert ist "allow"). Ein Beispiel für die Verwendung der Richtlinie zur Verweigerung des Zugriffs finden Sie unter Verweigern der Überschreibung in Unterstützte Modelle.

Role Based Access Control (RBAC)

Um RBAC zu unterstützen, sollten die folgenden zwei Punkte gegenüber der ACL-Modelldefinition geändert werden. (Referenz: RBAC)

Role Definition

[role_definition]
g = _, _

[role_definition] (optionaler Abschnitt) definiert das Rollenbeschreibungsformat. (Es ist leicht zu verstehen, wenn Sie es als eine Rollenversion von [policy_definition] betrachten.)

Wenn Sie in dieser Modelldefinition die Zuweisung von "Rolle1" zu "Benutzer1" beschreiben, ist dies "g, Benutzer1, Rolle1".

Matchers

[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act

"[Matcher]" bezieht sich auf die Rollendefinition als Funktion und entspricht der Kombination des Zugriffsausführers "r" (Benutzer) der Zugriffsbeurteilungsanforderung und des Zugriffsausführers "p" (Rolle) der Richtlinie. Stellen Sie fest, ob die Richtlinie vorhanden ist.

Implementierungsbeispiel (Java)

Stellen Sie ein Implementierungsbeispiel vor, das die Modelldefinition von rbac_model.conf liest und Rollen, Richtlinien und Zugriffsanforderungen bestimmt. ..

/*Modelldefinition laden*/
Enforcer se = new Enforcer(ClassLoader.getSystemResource("rbac_model.conf").getFile());
//Verwenden Sie die SyncedEnforcer-Klasse für die Verwendung mit mehreren Threads
// Enforcer se = new SyncedEnforcer(ClassLoader.getSystemResource("rbac_model.conf").getFile());

/*Rollenzuweisung*/
se.addNamedGroupingPolicy("g", "user1", "role1");
//Name der Standardrolle (Gruppe)"g"Es gibt auch eine Methode zum Zuweisen zu
//se.addGroupingPolicy("user1", "role1");
//se.addRoleForUser("user1", "role1");

se.addNamedPolicy("p", "role1", "data1", "read");
//Standardrichtlinienname"p"Es gibt auch eine Methode zum Hinzufügen einer Richtlinie
se.addPolicy("role1", "data1", "read");

/*Beurteilung der Zugriffsanfrage*/
if (se.enforce("user1", "data1", "read")) {
	System.out.println("user1 can read data1.");
}
if (se.enforce("role1", "data1", "read")) {
	System.out.println("role1 can read data1.");
}

/*Benutzerrolle abrufen*/
List<String> roleList = se.getRolesForUser("user1");
System.out.println("user1 has " + roleList + " roles.");

Ausführungsergebnis

user1 can read data1.
role1 can read data1.
user1 has [role1] roles.

Recommended Posts

Zugriffskontrollbibliothek Casbin Nutzungsübersicht
[Hinweis] Einfache Zusammenfassung des MVC-Modells
Zugriffskontrollbibliothek Casbin Nutzungsübersicht
Zusammenfassung
[Java11] Stream Usage Summary -Basics-
[Java] Zusammenfassung der Steuerungssyntax