
Casbin4d ist eine Cross Platform (Fironemonkey) -Implementierung für Delphi/Pascal der beliebten Autorisierungsbibliothek Casbin. Es bietet Unterstützung für die Durchsetzung der Autorisierung auf der Grundlage verschiedener Zugriffskontrollmodelle.
Sie sind herzlich eingeladen, diese Bibliothek zu teilen, zu überprüfen, zu überprüfen und zu verbessern. Bitte zögern Sie nicht, Kommentare zu kommentieren und Vorschläge anzugeben. Wenn Sie einen Beitrag leisten möchten, überprüfen Sie zuerst die Wiki -Seite für Entwickler für Entwickler
| Casbin | Jcasbin | Knoten-Casbin | Php-Casbin |
| Produktionsbereit | Produktionsbereit | Produktionsbereit | Produktionsbereit |
![]() | |||
|---|---|---|---|
| Pycasbin | Casbin4d | Casbin-net | Casbin-Rs |
| Produktionsbereit | Experimental- | Produktionsbereit | Produktionsbereit |
write-article und read-log verwendet werden. Es steuert den Zugriff auf einen bestimmten Artikel oder Protokoll nicht.resource.Owner Der Eigentümer kann verwendet werden, um das Attribut für eine Ressource zu erhalten./res/* , /res/:id und HTTP -Methoden wie GET , POST , PUT , DELETE .In Casbin wird ein Zugriffskontrollmodell in eine Conf -Datei abstrahiert, die auf dem Perm -Metamodell (Richtlinie, Effekt, Anfrage, Übereinstimmungen) basiert. Das Umschalten oder Upgrade des Autorisierungsmechanismus für ein Projekt ist also genauso einfach wie die Änderung einer Konfiguration. Sie können Ihr eigenes Zugriffskontrollmodell anpassen, indem Sie die verfügbaren Modelle kombinieren. Sie können beispielsweise RBAC -Rollen und ABAC -Attribute in einem Modell zusammenbringen und eine Reihe von Richtlinienregeln teilen.
Das einfachste und einfachste Modell in Casbin ist ACL. Das Modell von ACL sieht Folgendes aus:
# 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
Die obige Konfiguration folgt der GO -Sprache.
Casbin4d versteht es, aber Sie können auch den typischen Delphi/Pascal -Stil verwenden:
...
[matchers]
m = r.sub = p.sub and r.obj = p.sub and r.act = p.act
Eine Beispielrichtlinie für das ACL -Modell ist wie:
p, alice, data1, read
p, bob, data2, write
Für Casbin bedeutet dies::
In Ihrer Anwendung instanziieren Sie dann ein neues Casbin -Objekt (miteinander verbunden) und übergeben Sie die erforderlichen Dateien:
var
casbin: ICasbin;
begin
casbin:=TCasbin.Create ('model.conf', 'policies.csv');
...
end
und schließlich testen (durchsetzen) eine Behauptung:
...
if casbin.enforce(['alice,data1,read']) then
// Alice is super happy as she can read data1
else
// Alice is sad
...
Was Casbin tut:
{subject, object, action} oder ein angepasstes Formular, wie Sie definiert sind, und leugnen, dass die Genehmigungen unterstützt und leugnen.root oder administrator . Ein Superuser kann alles ohne Erklärungsberechtigungen tun.keyMatch eine Ressourcenschlüssel /foo/bar auf das Muster /foo* zuordnenWas Casbin nicht tut:
username und password , wenn sich ein Benutzer anmeldet)Casbin4d wird in einem Paket (derzeit für Delphi 10.3 Rio) erhältlich und Sie können es in der IDE installieren. Es gibt jedoch keine visuellen Komponenten, was bedeutet, dass Sie die Einheiten unabhängig von Paketen verwenden können. Importieren Sie einfach die Einheiten in Ihrem Projekt (vorausgesetzt, es macht Ihnen nichts aus, die Anzahl von ihnen)
Bitte beachten Sie die Wiki -Seiten
Sie können auch den Online -Editor (http://casbin.org/editor/) verwenden, um Ihr Casbin -Modell und Ihre Richtlinie in Ihren Webbrowser zu schreiben. Es bietet Funktionen wie syntax highlighting und code completion , genau wie eine IDE für eine Programmiersprache.
Sie können auch die Hauptdemo verwenden, um die Skripte und Behauptungen zu testen. Siehe die Demos
Siehe den Demos -Ordner. Der Beispiele -Ordner enthält die Beispielkonfigurations- und Richtliniendateien aus der ursprünglichen GO -Implementierung
Die Hauptdemo befindet sich unter Demos/Hauptordner. Sie können auch eine ausführbare Datei in diesem Ordner finden, damit Sie sie herunterladen und Casbin4D ausprobieren können

Bitte beachten Sie die Dokumentation
Casbin4d bietet einen Zugriffspunkt für die Verwaltung von Berechtigungen über den IpolicyManager. Wenn Sie mit anderen Implementierungen vertraut sind, werden Sie feststellen, dass sie zwei APIs (Management API und RBAC API) haben. Diese Implementierung kombiniert beide unter dem Richtlinienmanager
In Casbin4d wird die Richtlinienspeicherung über das Konzept des Adapters abstrahiert. Der Verbraucher von Casbin4D kann die Verwaltung von Richtlinienspeichern implementieren, da sie ihren Anforderungen für richtig halten. Casbin4d bietet zwei Adapter: eine für Textdateien (.csv) und einen Speicheradapter. Sie sind willkommen (und eingeladen), neue Adapter mit breiterem Gebrauch beizutragen. Bitte lassen Sie es uns wissen
Casbin4d wurde mit berücksichtigter Multi-Threading-Multi-Thread entwickelt. Die aktuelle Implementierung erreicht dies auf Durchsetzerebene
Es gibt ein Benchmark -Projekt im Benchmarks -Ordner, in dem die Durchsetzung der Richtlinien getestet wird.
Das Projekt wurde in der folgenden Maschine/Installation ausgeführt:
* Dell XPS 15 9560: Intel(R) Core(TM) i7-7700HQ CPU @2.80GHz, 2801MHz, 4 Core(s), 8 Logical Processor(s)
* Windows: Windows 10 Pro 64-bit, 10.0.16299 Build 16299
Die Ergebnisse sind in der folgenden Tabelle angezeigt. Der Zeitaufwand wird pro Operation (OP) berechnet, der einen einzelnen Aufruf an TCasbin.enforce[..] darstellt
| Testfall | Größe | Zeit über uns | Speicheraufwand |
|---|---|---|---|
| Rohe Durchsetzung | 2 Regeln (2 Benutzer) | 0,000090 Sek./Op | 0 kb |
| Grundmodell | 2 Regeln (2 Benutzer) | 0,000466 Sek./OP | 432 b |
| RBAC | 5 Regeln (2 Benutzer, 1 Rolle) | 0,000872 Sek./Op | 352 b |
| RBAC (klein) | 1.100 Regeln (1.000 Benutzer, 100 Rollen) | 0,238945 Sek./Op | 1,49 MB |
| RBAC (Medium) | 11.000 Regeln (10.000 Benutzer, 1.000 Rollen) | 9.745707 Sek./OP | 15,7 MB |
| RBAC (mit Ressourcenrollen) | 6 Regeln (2 Benutzer, 2 Rollen) | 0,000658 Sek./Op | 352 b |
| RBAC (mit Domains/Mietern) | 6 Regeln (2 Benutzer, 1 Rolle, 2 Domänen) | 0,000670 Sek./Op | 352 b |
| RBAC (mit Deny) | 6 Regeln (2 Benutzer, 1 Rolle) | 0,001260 Sek./Op | 380 b |
| ABAC | 0 Regeln (0 Benutzer) | 0,000181 Sek./Op | 120 b |
| Keymatch | 2 Regeln (2 Benutzer) | 0,000782 Sek./Op | 352 b |
| Priorität | 9 Regeln (2 Benutzer, 2 Rollen) | 0,001124 Sek./Op | 380 b |
| 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/Mietern | rbac_model_with_domains.conf | rbac_policy_with_domains.csv |
| ABAC | ABAC_MODEL.CONF | N / A |
| Erholsam | 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 |
Die überwiegende Mehrheit der Tests der ursprünglichen Implementierung in Go wurde in Delphi importiert. Bitte beachten Sie die Tests
Sie können die Codeabdeckung hier für den aktuellen Status überprüfen. Sie können die Tests und die Abdeckung verbessern
Dieses Projekt ist unter der Apache 2.0 -Lizenz lizenziert.
Wenn Sie Probleme oder Feature -Anfragen haben, kontaktieren Sie uns bitte. PR ist willkommen