Adapter
In Casbin wird die Speicherung der Richtlinien als Adapter implementiert (auch Middleware für Casbin). Ein Casbin-Benutzer kann einen Adapter verwenden, um Regeln von einem Speicher zu laden (aka LoadPolicy()
), oder speichern Sie Richtlinien-Regeln (aka SavePolicy()
). Um das Gewicht gering zu halten, legen wir den Adaptercode nicht in die Hauptbibliothek ein.
Unterstützte Adapter
Eine vollständige Liste der Casbin-Adapter finden Sie wie unten. Jeder Beitrag von Drittanbietern an einem neuen Adapter ist willkommen, bitte informieren Sie uns und wir werden ihn in diese Liste setzen:)
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
JDBC-Adapter | JDBC | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server werden von JDBC unterstützt |
Ruhezustand Adapter | RM | Casbin | ✅ | Oracle, DB2, SQL Server, Sybase, MySQL, PostgreSQL werden von Hibernate unterstützt |
MyBatis Adapter | RM | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server (das gleiche wie JDBC) werden von MyBatis 3 unterstützt |
Hutool Adapter | RM | @mapleafgo | ✅ | MySQL, Oracle, PostgreSQL, SQLite werden von Hutool unterstützt |
MongoDB Adapter | NoSQL | Casbin | ✅ | MongoDB wird unterstützt von mongodb-driver-sync |
DynamoDB Adapter | NoSQL | Casbin | ❌ | Für Amazon DynamoDB |
Redis-Adapter | KV Shop | Casbin | ✅ | Für Redis |
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
Gefilterter Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien mit Richtlinien-Untermengenunterstützung |
String-Adapter (eingebaut) | String | @calebfaruki | ❌ | Für Zeichenkette |
Einfacher Adapter | Natives ORM | Casbin | ✅ | pg, mysql, mysql2, sqlite3, oracledb, mssql werden vom Adapter selbst unterstützt |
Sequelize-Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server werden von Sequelize unterstützt |
Typ-ORM-Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB werden von TypeORM unterstützt |
Prisma-Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, AWS Aurora, Azure SQL wird von Prisma unterstützt |
Knex Adapter | RM | @sarneeh und knex | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracle werden von Knex.js unterstützt |
Beanstandung.js Adapter | RM | @willsoto | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracle werden von Objection.js unterstützt |
PostgreSQL Native Adapter | SQL | @touchifyapp | ✅ | PostgreSQL-Adapter mit Unterstützung für erweiterte Teilmengen-Subsets und verbesserten Leistungen, die mit KnotenpostgreSQL erstellt wurden. |
Mongoose Adapter | NoSQL | elastisch.io und Kasbin | ✅ | MongoDB wird von Mongoose unterstützt |
Mongoose Adapter (No-Transaction) | NoSQL | minhducck | ✅ | MongoDB wird von Mongoose unterstützt |
Knoten MongoDB Nativer Adapter | NoSQL | @juicycleff | ✅ | Für Knoten MongoDB Native |
DynamoDB Adapter | NoSQL | @fospitia | ✅ | Für Amazon DynamoDB |
Couchbase-Adapter | NoSQL | @MarkMYoung | ✅ | Für Couchbase |
Redis-Adapter | KV Shop | Casbin | ❌ | Für Redis |
Redis-Adapter | KV Shop | @NandaKishorJeripothula | ❌ | Für Redis |
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
Datenbank-Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server werden von Techone/Datenbank unterstützt |
Zend Db Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Oracle, IBM DB2, Microsoft SQL Server, andere PDO-Treiber werden von zend-db unterstützt |
Doktrin DBAL-Adapter (Empfehlung) | RM | Casbin | ✅ | Leistungsstarke Abstraktionsschicht für PHP-Datenbanken (DBAL) mit vielen Funktionen für Datenbankschema-Introspektion und -Management. |
Medoo-Adapter | RM | Casbin | ✅ | Medoo ist ein leichtes PHP Datenbank Framework zur Beschleunigung der Entwicklung unterstützt alle SQL-Datenbanken, einschließlich MySQL , MSSQL , SQLite , MariaDB , PostgreSQL , Sybase , Oracle und mehr. |
Laminas-db Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft Sql Server, PDO, etc. werden unterstützt von laminas-db |
Zend-db Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft Sql Server, PDO, etc. werden unterstützt von zend-db |
Redis-Adapter | KV Shop | @nsnake | ❌ | Für Redis |
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
SQLAlchemy Adapter | RM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase werden von SQLAlchemy unterstützt |
Async-Datenbank-Adapter | RM | sampingantech | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase werden von Datenbanken |
Peewee-Adapter | RM | @shblhy | ✅ | PostgreSQL, MySQL, SQLite werden von Peewee unterstützt |
MongoEngine-Adapter | RM | @zhangbailong945 | ❌ | MongoDB wird von MongoEngine unterstützt |
Pony ORM Adapter | RM | @drorvinkler | ✅ | MySQL, PostgreSQL, SQLite, Oracle, CockroachDB werden von Pony ORM unterstützt |
Tortoise ORM Adapter | RM | @thearchitector | ✅ | PostgreSQL (>=9.4), MySQL, MariaDB und SQLite werden von Tortoise ORM unterstützt |
Couchbase-Adapter | NoSQL | Wissenschaftslogik | ✅ (ohne remove_filtered_policy() ) | Für Couchbase |
DynamoDB Adapter | NoSQL | @abqadeer | ✅ | Für DynamoDB |
Pymongo-Adapter | NoSQL | Casbin | ❌ | MongoDB wird von Pymongo unterstützt |
GCP Firebase-Adapter | Wolke | @devrushi41 | ✅ | Für Google Cloud Plattform Firebase |
Async ormar Adapter | ORM | sampingantech | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by ormar |
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
EF-Adapter | RM | Casbin | ❌ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. werden unterstützt von Entity Framework 6 |
EFCore-Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. werden vom Entity Framework Core unterstützt |
EFCore Adapter (.NET Core 5) | RM | @g4dvali | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. werden vom Entity Framework Core unterstützt |
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
Diesel-Adapter | RM | Casbin | ✅ | SQLite, PostgreSQL, MySQL werden von Diesel unterstützt |
Sqlx-Adapter | RM | Casbin | ✅ | PostgreSQL, MySQL wird von Sqlx mit vollständig asynchroner Operation unterstützt |
SeaORM-Adapter | RM | lingdu1234 | ✅ | PostgreSQL, MySQL wird vom SeaORM mit vollständig asynchroner Operation unterstützt |
JSON-Adapter | String | Casbin | ✅ | Für JSON |
YAML-Adapter | String | Casbin | ✅ | Für YAML |
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
Sequel-Adapter | RM | CasbinRuby | ✅ | ADO, Amalgalite, IBM_DB, JDBC, MySQL, Mysql2, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite3 und TinyTDS werden von Sequel unterstützt |
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
Speicheradapter (eingebaut) | Speicher | Casbin | ❌ | Für Speicher |
Flüssiger Adapter | RM | Casbin | ✅ | PostgreSQL, SQLite, MySQL, MongoDB werden von fließend unterstützt |
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
Gefilterter Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien mit Richtlinien-Untermengenunterstützung |
LuaSQL-Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, SQLite3 werden von LuaSQL unterstützt |
4DaysORM-Adapter | RM | Casbin | ✅ | MySQL, SQLite3 werden von 4DaysORM unterstützt |
note
- Wenn
casbin.NewEnforcer()
mit einem expliziten oder impliziten Adapter aufgerufen wird, wird die Richtlinie automatisch geladen. - Sie können
e.LoadPolicy()
aufrufen, um die Richtlinien-Regeln aus dem Speicher neu zu laden. - Wenn der Adapter die
Auto-Speichern
Funktion nicht unterstützt, Die Richtlinien-Regeln können beim Hinzufügen oder Entfernen von Richtlinien nicht automatisch wieder in den Speicher gespeichert werden. Sie müssenSavePolicy()
manuell aufrufen, um alle Regeln zu speichern.
Beispiele
Hier finden Sie einige Beispiele:
Datei-Adapter (eingebaut)
Unten wird gezeigt, wie man einen Erzwinger aus dem eingebauten Datei-Adapter initialisiert:
import "github.com/casbin/casbin"
e := casbin.NewEnforcer("examples/basic_model.conf", "examples/basic_policy.csv")
Casbin\Enforcer;
$e = new Enforcer('examples/basic_model.conf', 'examples/basic_policy.csv');
verwenden Sie casbin::prelude::*;
let mut e = Enforcer::new("examples/basic_model.conf", "examples/basic_policy.csv").await?;
Dies ist das gleiche mit:
import (
"github.com/casbin/casbin"
"github.com/casbin/casbin/file-adapter"
)
a := fileadapter.NewAdapter("examples/basic_policy.csv")
e := casbin.NewEnforcer("examples/basic_model.conf", a)
Casbin\Enforcer;
Casbin\Persist\Adapters\FileAdapter;
$a = new FileAdapter('examples/basic_policy.csv');
$e = new Enforcer('examples/basic_model.conf', $a);
verwenden Sie casbin::prelude::*;
lassen Sie einen = FileAdapter::new("examples/basic_policy.csv");
let e = Enforcer::new("examples/basic_model.conf", a).await?;
MySQL adapter
Im Folgenden wird gezeigt, wie ein Durchsetzer aus der MySQL-Datenbank initialisiert wird. es verbindet sich mit einer MySQL DB auf 127.0.0.1:3306 mit einem root-und einem leeren Passwort.
import (
"github.com/casbin/casbin"
"github.com/casbin/mysql-adapter"
)
a := mysqladapter.NewAdapter("mysql", "root:@tcp(127.0.0.1:3306)/")
e := casbin.NewEnforcer("examples/basic_model.conf", a)
// https://github. om/casbin-rs/diesel-adapter
// Stellen Sie sicher, dass Sie die Funktion `mysql`
aktivieren::prelude::*;
verwenden Sie diesel_adapter::{ConnOptions, DieselAdapter};
lassen Sie mut conn_opts = ConnOptions::default();
conn_opts
. et_hostname("127.0.0.1")
. et_port(3306)
.set_host("127.0.0.1:3306") // Hostname, Port config
.set_database("casbin")
überschreiben. et_auth("casbin_rs", "casbin_rs");
let a = DieselAdapter::new(conn_opts)?;
let mut e = Enforcer::new("examples/basic_model.conf", a).await?;
// https://github.com/php-casbin/dbal-adapter
use Casbin\Enforcer;
use CasbinAdapter\DBAL\Adapter as DatabaseAdapter;
$config = [
// Either 'driver' with one of the following values:
// pdo_mysql,pdo_sqlite,pdo_pgsql,pdo_oci (unstable),pdo_sqlsrv,pdo_sqlsrv,
// mysqli,sqlanywhere,sqlsrv,ibm_db2 (unstable),drizzle_pdo_mysql
'driver' => 'pdo_mysql',
'host' => '127.0.0.1',
'dbname' => 'test',
'user' => 'root',
'password' => '',
'port' => '3306',
];
$a = DatabaseAdapter::newAdapter($config);
$e = new Enforcer('examples/basic_model.conf', $a);
Verwende deinen eigenen Speicheradapter
Du kannst deinen eigenen Adapter verwenden wie unten:
import (
"github.com/casbin/casbin"
"github.com/your-username/your-repo"
)
a := yourpackage.NewAdapter(params)
e := casbin.NewEnforcer("examples/basic_model.conf", a)
Zwischen verschiedenen Adaptern migrieren/konvertieren
If you want to convert adapter from A
to B
, you can do like this:
- Richtlinien von A in den Speicher laden
e, _ := NewEnforcer(m, A)
oder
e.SetAdapter(A)
e.LoadPolicy()
konvertieren Sie Ihren Adapter von A nach B
e.SetAdapter(B)
Speichere Richtlinie aus dem Speicher in B
e. oadPolicy()
Lade/Speichern zur Laufzeit
Sie können auch das Modell neu laden die Richtlinie neu laden oder die Richtlinie nach der Initialisierung speichern:
// Das Modell aus der CONF-Datei neu laden.
e.LoadModel()
// Richtlinien aus der Datei/Datenbank neu laden.
e.LoadPolicy()
// Speichere die aktuelle Richtlinie (in der Regel nach der Änderung mit der Casbin API) zurück in die Datei/Datenbank.
e.SavePolicy()
AutoSave
Es gibt eine Funktion namens Auto-Speichern
für Adapter. Wenn ein Adapter Auto-Speichern unterstützt
, es bedeutet, dass es unterstützen kann, dem Speicher eine einzige Richtlinien-Regel hinzuzufügen oder eine einzige Richtlinien-Regel aus dem Speicher zu entfernen. Dies ist anders als SavePolicy()
, da letztere alle Richtlinien-Regeln im Speicher löschen und alle Richtlinien-Regeln von Casbin erzwungen in die Speicherung speichern. Es könnte also zu Problemen bei der Leistung kommen, wenn die Anzahl der politischen Regeln groß ist.
Wenn der Adapter Auto-Speichern
unterstützt, können Sie diese Option über Enforcer.EnableAutoSave()
ändern. Die Option ist standardmäßig aktiviert (wenn der Adapter es unterstützt).
note
- Die Funktion
Auto-Speichern
ist optional. Ein Adapter kann wählen, ob er implementiert wird oder nicht. Auto-Speichern
funktioniert nur für einen Casbin-Durchsetzer wenn der Adapter, den der Durchsetzer verwendet, dies unterstützt.- Sehen Sie sich die Spalte
AutoSave
in der oben genannten Adapterliste an, um zu sehen, obAuto-Speichern
von einem Adapter unterstützt wird.
Hier ist ein Beispiel für die Verwendung von Auto-Speichern
:
import (
"github.com/casbin/casbin"
"github.com/casbin/xorm-adapter"
_ "github.com/go-sql-driver/mysql"
)
// Standardmäßig ist die Option AutoSave für einen Enforcer aktiviert.
a := xormadapter.NewAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0.1:3306)/")
e := casbin.NewEnforcer("examples/basic_model.conf", a)
// AutoSave Option deaktivieren.
e.EnableAutoSave(false)
// Weil AutoSave deaktiviert ist, die Änderung der Richtlinien wirkt sich nur auf die Richtlinie in Casbin durchsetzer,
// sie wirkt sich nicht auf die Richtlinien im Speicher.
e.AddPolicy(...)
e.RemovePolicy(...)
// Automatische Speicherung aktivieren.
e.EnableAutoSave(true)
// Weil AutoSave aktiviert ist, die Änderung der Richtlinien betrifft nicht nur die Richtlinien in Casbin Durchsetzer,
// sondern auch die Richtlinien im Speicher.
e.AddPolicy(...)
e.RemovePolicy(...)
Weitere Beispiele finden Sie hier: https://github.com/casbin/xorm-adapter/blob/master/adapter_test.go
Wie man einen Adapter schreibt
Alle Adapter sollten die Adapter Schnittstelle implementieren, indem mindestens zwei obligatorische Methoden angegeben werden:LoadPolicy(Modellmodell). odel) Fehler
und SavePolicy(model model.Model)
.
Die anderen drei Funktionen sind optional. Sie sollten implementiert werden, wenn der Adapter die Auto-Save
Funktion unterstützt.
Methode | Typ | Beschreibung |
---|---|---|
LoadPolicy() | mandatory | Lade alle Regeln aus dem Speicher |
SavePolicy() | mandatory | Alle Richtlinien-Regeln im Speicher speichern |
AddPolicy() | optional | Richtlinien-Regel zum Speicher hinzufügen |
RemovePolicy() | optional | Eine Richtlinien-Regel vom Speicher entfernen |
FilteredPolicy() entfernen | optional | Regeln, die dem Filter entsprechen, vom Speicher entfernen |
note
Wenn ein Adapter Auto-Speichern
nicht unterstützt, sollte er eine leere Implementierung für die drei optionalen Funktionen bereitstellen. Hier ist ein Beispiel für Golang:
// AddPolicy fügt dem Speicher eine Richtlinien-Regel hinzu.
func (a *Adapter) AddPolicy(sec string, ptype string, rule []string) error {
return errors. ew("nicht implementiert")
}
// Entfernt eine Richtlinien-Regel vom Speicher.
func (a *Adapter) removePolicy(sec string, ptype string, rule []string) error {
return errors. ew("nicht implementiert")
}
// Entfernt Richtlinien-Regeln, die mit dem Filter übereinstimmen, vom Speicher entfernt.
func (a *Adapter) removeFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error {
return errors.New("not implemented")
}
Beim Aufruf dieser drei optionalen Funktionen wird der nicht implementierte
Fehler ignoriert.
Es gibt Details, wie man einen Adapter schreibt.
- Datenstruktur. Adapter should support reading at least six columns.
- Datenbank-Name. Der Standard-Datenbankname sollte
casbin
sein. - Tabellenname. Der Standard-Tabellenname sollte
casbin_rule
sein. - Ptype Spalte. Name dieser Spalte sollte
ptype
anstelle vonp_type
oderPtype
sein. - Tabellendefinition sollte
(id int primary keyy, ptype varchar, v0 varchar, v1 varchar, v2 varchar, v3 varchar, v4 varchar, v5 varchar)
sein. - Der eindeutige Schlüsselindex sollte auf Spalten
ptype,v0,v1,v2,v3,v4,v5
gebaut werden. LoadFilteredPolicy
benötigt einenFilter
als Parameter. Der Filter sollte so etwas sein. json { "p":[ [ "alice" ], [ "bob" ] ], "g":[ "", "book_group" ], [ "", "pen_group" ] ], "g2":[ [ "alice" ] ] }
Wer ist für die Erstellung der Datenbank verantwortlich?
Als Konvent der Adapter sollte in der Lage sein, automatisch eine Datenbank mit dem Namen casbin
zu erstellen, falls sie nicht vorhanden ist und sie für die Speicherung von Richtlinien verwenden. Bitte verwenden Sie den Xorm-Adapter als Referenzimplementierung: https://github.com/casbin/xorm-adapter