
Autorisierungsbibliothek zur Durchsetzung von ACL-, RBAC-, ABAC- und benutzerdefinierten Zugriffskontrollmodellen mit RESTful-Abgleich- und Policy-Verwaltungs-APIs für Anwendungen und Dienste.
News: Machen Sie sich immer noch Sorgen, wie Sie die richtige Apache-Casbin-Richtlinie schreiben? Der Apache Casbin online editor kommt, um zu helfen! Probieren Sie es aus unter: https://casbin.apache.org/editor/

Apache Casbin ist eine leistungsstarke und effiziente Open-Source-Bibliothek für Zugriffskontrolle in Golang-Projekten. Sie unterstützt die Durchsetzung von Autorisierungen auf der Grundlage verschiedener Zugriffskontrollmodelle.
write-article, read-log verwendet werden. Der Zugriff auf einen bestimmten Artikel oder ein bestimmtes Log wird nicht kontrolliert.resource.Owner kann verwendet werden, um das Attribut einer Ressource abzurufen./res/*, /res/:id sowie HTTP-Methoden wie GET, POST, , .In Casbin wird ein Zugriffskontrollmodell auf der Grundlage des PERM-Metamodells (Policy, Effect, Request, Matchers) in eine CONF-Datei abstrahiert. Der Wechsel oder das Upgrade des Autorisierungsmechanismus eines Projekts ist daher so einfach wie das Ändern einer Konfiguration. Sie können Ihr eigenes Zugriffskontrollmodell anpassen, indem Sie die verfügbaren Modelle kombinieren. Beispielsweise können Sie RBAC-Rollen und ABAC-Attribute gemeinsam in einem Modell verwenden und einen gemeinsamen Satz von Richtlinienregeln nutzen.
Das grundlegendste und einfachste Modell in Casbin ist ACL. Die CONF-Datei des ACL-Modells lautet:
# Request definition
[request_definition]
r = sub, obj, act
# Policy definition
[policy_definition]
p = sub, obj, act
# Policy effect
[policy_effect]
e = some(where (p.eft == allow))
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
Eine Beispielrichtlinie für das ACL-Modell sieht wie folgt aus:
p, alice, data1, read
p, bob, data2, write
Das bedeutet:
Wir unterstützen außerdem den Mehrzeilenmodus, indem Sie am Ende '\' anhängen:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
Wenn Sie darüber hinaus ABAC verwenden, können Sie den Operator in in der Casbin-golang-Ausgabe wie folgt ausprobieren (jCasbin und Node-Casbin werden noch nicht unterstützt):
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
Sie SOLLTEN jedoch sicherstellen, dass die Länge des Arrays MEHR als 1 beträgt, da dies sonst einen Panikfehler verursacht.
Weitere Operatoren finden Sie unter govaluate
Was Apache Casbin tut:
{subject, object, action}-Form oder einer von Ihnen definierten individuellen Form durchsetzen; sowohl Allow- als auch Deny-Autorisierungen werden unterstützt.root oder administrator unterstützen. Ein Superuser kann ohne explizite Berechtigungen alles tun.keyMatch einen Ressourcenschlüssel /foo/bar auf das Muster /foo* abbilden.Was Apache Casbin NICHT tut:
username und password bei der Anmeldung eines Benutzers)go get github.com/casbin/casbin/v3
https://casbin.apache.org/docs/overview
Sie können auch den Online-Editor (https://casbin.apache.org/editor/) verwenden, um Ihr Casbin-Modell und Ihre Richtlinie in Ihrem Webbrowser zu schreiben. Er bietet Funktionen wie syntax highlighting und code completion, genau wie eine IDE für eine Programmiersprache.
https://casbin.apache.org/docs/tutorials
Erstellen Sie einen neuen Casbin-Enforcer mit einer Modelldatei und einer Richtliniendatei:
e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
Hinweis: Sie können einen Enforcer auch mit einer Richtlinie in der Datenbank anstelle einer Datei initialisieren. Weitere Details finden Sie im Abschnitt Richtlinienpersistenz.
Fügen Sie unmittelbar vor dem Zugriff einen Enforcement-Hook in Ihren Code ein:
sub := "alice" // the user that wants to access a resource.
obj := "data1" // the resource that is going to be accessed.
act := "read" // the operation that the user performs on the resource.
if res, _ := e.Enforce(sub, obj, act); res {
// permit alice to read data1
} else {
// deny the request, show an error
}
Neben der statischen Richtliniendatei bietet Apache Casbin auch eine API für die Berechtigungsverwaltung zur Laufzeit. Beispielsweise können Sie alle einem Benutzer zugewiesenen Rollen wie folgt abrufen:
roles, _ := e.GetImplicitRolesForUser(sub)
Weitere Verwendungsmöglichkeiten finden Sie unter APIs zur Richtlinienverwaltung.
Apache Casbin bietet zwei API-Sätze zur Verwaltung von Berechtigungen:
Wir bieten außerdem eine webbasierte Benutzeroberfläche für die Modell- und Richtlinienverwaltung:


https://casbin.apache.org/docs/adapters
https://casbin.apache.org/docs/watchers
https://casbin.apache.org/docs/role-managers
https://casbin.apache.org/docs/benchmark
Authz-Middleware für Web-Frameworks: https://casbin.apache.org/docs/middlewares
https://casbin.apache.org/docs/adopters
Bitte lesen Sie die Beitragsanleitung.
Dieses Projekt existiert dank aller Menschen, die mitwirken.
Dieses Projekt ist unter der Apache-2.0-Lizenz lizenziert.
Wenn Sie Probleme oder Feature-Wünsche haben, kontaktieren Sie uns bitte. PRs sind willkommen.
![]() | ![]() | ![]() | ![]() |
|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| produktionsreif | produktionsreif | produktionsreif | produktionsreif |
![]() | ![]() | ![]() | ![]() |
|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| produktionsreif | produktionsreif | produktionsreif | produktionsreif |
PUTDELETE| Modell | Modelldatei | Richtliniendatei |
|---|
| ACL | basic_model.conf | basic_policy.csv |
| ACL mit Superuser | basic_model_with_root.conf | basic_policy.csv |
| ACL ohne Benutzer | basic_model_without_users.conf | basic_policy_without_users.csv |
| ACL ohne Ressourcen | basic_model_without_resources.conf | basic_policy_without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| RBAC mit Ressourcenrollen | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC mit Domänen/Mandanten | rbac_model_with_domains.conf | rbac_policy_with_domains.csv |
| ABAC | abac_model.conf | N/A |
| RESTful | keymatch_model.conf | keymatch_policy.csv |
| Deny-override | rbac_model_with_deny.conf | rbac_policy_with_deny.csv |
| Priorität | priority_model.conf | priority_policy.csv |