API-Übersicht
Diese Übersicht zeigt Ihnen nur, wie Sie Casbin APIs verwenden und erklärt nicht, wie Casbin installiert wird und wie es funktioniert. You can find those tutorials here: installation of Casbin and how Casbin works. Wenn Sie also anfangen, dieses Tutorial zu lesen, gehen wir davon aus, dass Sie Casbin vollständig installiert und in Ihren Code importiert haben.
API erzwingen
Beginnen wir mit den erzwungenen APIs von Casbin. Wir laden ein RBAC-Modell von model.conf
und laden Richtlinien von policy.csv
. You can learn the Model syntax here, and we won't talk about it in this tutorial. Wir gehen davon aus, dass Sie die folgenden Konfigurationsdateien verstehen können:
model.conf
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, handeln
[role_definition]
g = _, _
[policy_effect]
e = irgendwo (p. ft == allow))
[matchers]
m = g(r.sub, p. ub) && r.obj == p.obj && r.act == p.act
policy.csv
p, admin, data1, read
p, admin, data1, write
p, admin, data2, read
p, admin, data2, schreibe
p, alice, data1, lese
p, bob, data2, schreibe
g, amber, admin
g, abc, admin
Nachdem Sie die Konfigurationsdateien gelesen haben, lesen Sie bitte den folgenden Code.
// Lade Informationen aus Dateien
enforcer, err := casbin.NewEnforcer("./example/model.conf", "./example/policy. sv")
if err != nil {
log. atalf("error, detail: %s", err)
}
ok, err := enforcer.Enforce("alice", "data1", "read")
Dieser Code lädt das Zugriffskontrollmodell und die Richtlinien aus lokalen Dateien. Funktion casbin.NewEnforcer()
gibt einen Vollstrecker zurück. Es erkennt seine 2 Parameter als Dateipfade und lädt die Dateien von dort. Fehler im Prozess wurden in err
gespeichert. Dieser Code benutzt den Standard-Adapter, um Modell und Richtlinien zu laden. Und natürlich können Sie das gleiche Ergebnis mit Hilfe eines Drittanbieter-Adapters erzielen.
Code ok, err := enforcer.Enforce("alice", "data1", "read")
soll Zugriffsberechtigungen bestätigen. Wenn der Alice auf die Daten 1 mit gelesener Operation zugreifen kann, der zurückgegebene Wert ok
wird true
sein, andernfalls ist er false
. In diesem Beispiel ist der Wert von ok
true
.
EnforceEx API
Manchmal kann man sich fragen, welche Politik die Anfrage erlaubt hat, deshalb haben wir die Funktion EnforceEx()
vorbereitet. Sie können es so verwenden:
ok, reason, err := enforcer.EnforceEx("amber", "data1", "read")
fmt.Println(ok, Grund) // true [admin data1 read]
Funktion EnforceEx()
gibt den exakten Richtlinienstring im Rückgabewert Grund
zurück. In diesem Beispiel ist Bernstein
eine Rolle von admin
, so Policy p, admin, data1, lesen Sie
hat diese Anfrage true
. Das Output dieses Codes ist in dem Kommentar.
Casbin bereitete eine Menge solcher APIs vor. Diese APIs haben einige zusätzliche Funktionen auf der Basis hinzugefügt. Sie sind:
ok, err := enforcer.EnforceWithMatcher(Matcher, Anfrage)
Mit einem Matcher.
ok, Grund, err := enforcer.EnforceExWithMatcher(Matcher, Anfrage)
Eine Kombination von
EnforceWithMatcher()
undEnforceEx()
.boolArray, err := enforcer.BatchEnforce(requests)
Führe einen Listenauftrag aus, gibt ein Array zurück.
Dies ist eine einfache Verwendung von Casbin. Sie können Casbin benutzen, um einen Autorisierungsserver über diese API zu starten. Wir zeigen Ihnen einige andere APIs in den nächsten Absätzen.
Management-API
Get API
Diese APIs werden verwendet, um exakte Objekte in Richtlinien zu erhalten. Dieses Mal haben wir einen Vollstrecker wie das letzte Beispiel geladen und bekommen etwas davon.
Bitte lesen Sie den folgenden Code:
enforcer,err := casbin.NewEnforcer("./example/model.conf", "./example/policy.csv")
if err != nil {
fmt.Printf("Error, details: %s\n", err)
}
allSubjects := enforcer.GetAllSubjects()
fmt.Println(allsubjects)
Wie das letzte Beispiel haben auch die ersten 4 Zeilen einige notwendige Informationen aus lokalen Dateien geladen. Darüber werden wir hier nicht mehr reden.
Code allSubjects := enforcer.GetAllSubjects()
hat alle Subjekte in der Richtlinien-Datei erhalten und sie als Array zurückgegeben. Dann haben wir dieses Array gedruckt.
Normalerweise sollte die Ausgabe des Codes sein:
[Adminalice Bob]
Sie können auch die Funktion GetAllSubjects()
zu GetAllNamedSubjects()
ändern, o holt die Liste der Themen, die in den aktuell benannten Richtlinien erscheinen.
Ebenso haben wir GetAll-
Funktionen für Objekte, Aktionen, Rollen
vorbereitet. Das einzige, was Sie tun müssen, ist, das Wort Betreff
im Funktionsnamen in das zu ändern, was Sie wollen, wenn Sie auf diese Funktionen zugreifen möchten.
Außerdem haben wir mehr Entscheidungsträger für die Politik. Die Rufmethode und der Rückgabewert ähneln denen oben.
policy = e.GetPolicy()
erhält alle Berechtigungsregeln in der Richtlinie.filteredPolicy := e.GetFilteredPolicy(0, "alice")
holt alle Autorisierungsregeln in der Richtlinie, Feldfilter können angegeben werden.namedPolicy := e.GetNamedPolicy("p")
erhält alle Autorisierungsregeln in der angegebenen Richtlinie.filteredNamedPolicy = e.GetFilteredNamedPolicy("p", 0, "bob")
holt alle Autorisierungsregeln in den genannten Richtlinien, Feldfilter können angegeben werden.groupingPolicy := e.GetGroupingPolicy()
holt alle Rollenvererbungsregeln in der Richtlinie.filteredGroupingPolicy := e.GetFilteredGroupingPolicy(0, "alice")
erhält alle Rollenvererbungsregeln in der Richtlinie, Feldfilter können angegeben werden.namedGroupingPolicy := e.GetNamedGroupingPolicy("g")
holt alle Rollenvererbungsregeln in der Richtlinie.namedGroupingPolicy := e.GetFilteredNamedGroupingPolicy("g", 0, "alice")
erhält alle Rollenvererbungsregeln in der Richtlinie.
API hinzufügen, löschen, Update API
Casbin bereitete eine Menge APIs für Richtlinien vor. Mit diesen APIs können Sie Richtlinien zur Laufzeit dynamisch hinzufügen, löschen oder bearbeiten.
Dieser Code zeigt Ihnen, wie Sie Ihre Richtlinien hinzufügen, entfernen und aktualisieren und wie Sie bestätigen können, dass eine Richtlinie existiert:
// Lade Informationen aus Dateien
enforcer,err := casbin.NewEnforcer("./example/model.conf", "./example/policy.csv")
if err != nil {
fmt. rintf("Error, details: %s\n", err)
}
// Richtlinien hinzufügen, dann HasPolicy() verwenden, um zu bestätigen, dass
Vollstreckung durchgesetzt wird. ddPolicy("added_user", "data1", "read")
hasPolicy := enforcer.HasPolicy("added_user", "data1", "read")
fmt. rintln(hasPolicy) // true haben wir hinzugefügt, dass die Richtlinie erfolgreich
// eine Richtlinie entfernen und dann HasPolicy() verwenden, um zu bestätigen, dass
durchgesetzt wird. emovePolicy("alice", "data1", "read")
hasPolicy = enforcer.HasPolicy("alice", "data1", "read")
fmt. rintln(hasPolicy) // falsch, wir haben diese Richtlinie erfolgreich gelöscht
// Richtlinien aktualisieren und dann HasPolicy() verwenden, um zu bestätigen, dass
Durchsetzer ist. pdatePolicy([]string{"added_user", "data1", "read"}, []string{"added_user", "data1", "write"})
hasPolicy = enforcer.HasPolicy("added_user", "data1", "read")
fmt. rintln(hasPolicy) // falsch, die Ursprungsrichtlinie ist abgelaufen
hasPolicy = enforcer.HasPolicy("added_user", "data1", "write")
fmt.Println(hasPolicy) // true the new policy is in use
Mit diesen vier Arten von APIs können Sie Ihre Richtlinien bearbeiten. Wie diese haben wir die gleichen Arten von APIs für FilteredPolicy, NamedPolicy, FilteredNamedPolicy, GroupingPolicy, NamedGroupingPolicy, FilteredGroupingPolicy, FilteredNamedGroupingPolicy
vorbereitet. Um sie zu verwenden, müssen Sie nur das Wort Richtlinie
im Funktionsnamen zu den obigen Wörtern ersetzen.
Wenn Sie außerdem Parameter in Arrays ändern, können Sie Ihre Richtlinien Batch bearbeiten.
Zum Beispiel für Funktionen wie diese:
enforcer.UpdatePolicy([]string{"eve", "data3", "read"}, []string{"eve", "data3", "write"})
wenn wir Richtlinien
zu Richtlinien
ändern und den Parameter bearbeiten:
enforcer.UpdatePolicies([][][]string{{"eve", "data3", "read"}, {"jack", "data3", "read"}}, [][]string{{"eve", "data3", "write"}, {"jack", "data3", "write"}})
dann können wir diese Richtlinien Batch bearbeiten.
Gleiche Operationen sind auch nützlich für GroupingPolicy, NamedGroupingPolicy
.
RBAC API
Casbin stellt Ihnen APIs zur Verfügung, um das RBAC-Modell und -Richtlinien zu ändern. Wenn Sie mit RBAC vertraut sind, können Sie diese APIs einfach verwenden.
Hier zeigen wir Ihnen nur wie Sie die RBAC APIs von Casbin verwenden und sprechen nicht über RBAC selbst. You can get more details here.
Wir verwenden diesen Code, um Modell und Richtlinien wie zuvor zu laden.
enforcer,err := casbin.NewEnforcer("./example/model.conf", "./example/policy.csv")
if err != nil {
fmt.Printf("Error, details: %s\n", err)
}
dann verwenden Sie eine Instanz des Vollstreckenden Enforcer
um auf diese APIs zuzugreifen.
roles, err := enforcer.GetRolesForUser("amber")
fmt.Println(roles) // [admin]
Benutzer, err := enforcer.GetUsersForRole("admin")
fmt.Println(users) // [amber abc]
GetRolesForUser()
hat ein Array zurückgegeben, das alle Rollen enthielt, die Amber enthalten. In diesem Beispiel hat Bernstein nur einen Rollen-Admin, also sind Rollen
[admin]
. Und ähnlich können Sie GetUsersForRole()
verwenden, um Benutzer zur Rolle zu bringen. Der Rückgabewert dieser Funktion ist auch ein Array.
enforcer.HasRoleForUser("amber", "admin") // true
Sie können HasRoleForUser()
verwenden, um zu bestätigen, ob der Benutzer zur Rolle gehört. In diesem Beispiel ist Bernstein Mitglied des Admins, also ist der Rückgabewert der Funktion true
.
fmt.Println(enforcer.Enforce("bob", "data2", "write")) // true
enforcer.DeletePermission("data2", "write")
fmt.Println(enforcer.Enforce("bob", "data2", "write")) // false
Sie können DeletePermission()
verwenden, um eine Berechtigung zu löschen.
fmt.Println(enforcer.Enforce("alice", "data1", "read")) // true
enforcer.DeletePermissionForUser("alice", "data1", "read")
fmt.Println(enforcer.Enforce("alice", "data1", "read")) // false false
Und verwenden Sie DeletePermissionForUser()
um eine Berechtigung für einen Benutzer zu löschen.
Casbin hat viele APIs wie diese. Ihre Rufmethoden und Rückgabewerte haben den gleichen Stil wie die oben genannten APIs. You can find these APIs in next documents.