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:)
- Go
- Java
- Node.js
- PHP
- Python
- .NET
- Rust
- Ruby
- Swift
- Lua
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
Gefilterter Datei-Adapter (eingebaut) | Datei | @gesichts-Heiliger | ❌ | Für .CSV (Comma-Separated Values) Dateien mit Richtlinien-Untermengenunterstützung |
SQL-Adapter | SQL | @Blank-Xu | ✅ | MySQL, PostgreSQL, SQL Server, SQLite3 werden in Master Branch unterstützt und Oracle wird in Orakel Branch von Datenbank/sql unterstützt |
Xorm-Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, TiDB, SQLite, SQL Server, Oracle werden von Xorm unterstützt |
GORM Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, Sqlite3, SQL Server are supported by GORM |
GORM Adapter Ex | RM | Casbin | ✅ | MySQL, PostgreSQL, Sqlite3, SQL Server are supported by GORM |
Ent-Adapter | RM | Casbin | ✅ | MySQL, MariaDB, PostgreSQL, SQLite, Gremlin-basierte Graphdatenbanken werden von ent ORM unterstützt |
Beego ORM Adapter | RM | Casbin | ✅ | MySQL, PostgreSQL, Sqlite3 werden von Beego ORM unterstützt |
SQLX-Adapter | RM | @memwey | ✅ | MySQL, PostgreSQL, SQLite, Oracle werden von SQLX unterstützt |
Sqlx-Adapter | RM | @Blank-Xu | ✅ | MySQL, PostgreSQL, SQL Server, SQLite3 werden in Master Branch unterstützt und Oracle wird in Orakel Branch von sqlx unterstützt |
GF ORM Adapter | RM | @vance-liu | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM |
GoFrame ORM Adapter | RM | @kotlin2018 | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM |
gf-adapter | ORM | @zcyc | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM |
Gdb Adapter | RM | @jxo-me | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM |
GoFrame V2 Adapter | ORM | @hailaz | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM |
Gefilterter PostgreSQL-Adapter | SQL | Casbin | ✅ | Für PostgreSQL |
Gefilterter pgx-Adapter | SQL | @pckhoi | ✅ | PostgreSQL wird von pgx unterstützt |
PostgreSQL-Adapter | SQL | @cychiuae | ✅ | Für PostgreSQL |
RQLite-Adapter | SQL | EDOMO-Systeme | ✅ | Für RQLite |
MongoDB Adapter | NoSQL | Casbin | ✅ | Für MongoDB basierend auf MongoDB Go Treiber |
RethinkDB Adapter | NoSQL | @adityapandey9 | ✅ | Für RethinkDB |
Kassandra-Adapter | NoSQL | Casbin | ❌ | Für Apache Cassandra DB |
DynamoDB Adapter | NoSQL | HOOQ | ❌ | Für Amazon DynamoDB |
Dynacasbin | NoSQL | NewbMiao | ✅ | Für Amazon DynamoDB |
ArangoDB Adapter | NoSQL | @adamwasila | ✅ | Für ArangoDB |
Amazon S3 Adapter | Wolke | Lösung | ❌ | Für Minio und Amazon S3 |
Azure Kosmos DB Adapter | Wolke | @Spacycodierer | ✅ | Für Microsoft Azure Cosmos DB |
GCP Firestore Adapter | Wolke | @reedom | ❌ | Für Google Cloud Plattform-Firestore |
GCP Cloud-Speicheradapter | Wolke | qurami | ❌ | Für Google Cloud Platform Cloud Storage |
GCP Cloud Spanner Adapter | Wolke | @blumenight | ✅ | Für Google Cloud Plattform Cloud Spanner |
Konsumadapter | KV Shop | @ankitm123 | ❌ | Für HashiCorp Verbrauch |
Redis-Adapter (Redigo) | KV Shop | Casbin | ✅ | Für Redis |
Redis Adapter (go-redis) | KV Shop | @mlsen | ✅ | Für Redis |
Etcd-Adapter | KV Shop | @sebastianliu | ❌ | Für etcd |
BoltDB Adapter | KV Shop | @speza | ✅ | Für Bolt |
Bolt Adapter | KV Shop | @wirepair | ❌ | Für Bolt |
BadgerDB Adapter | KV Shop | @inits | ✅ | Für BadgerDB |
Protobuf Adapter | Stream | Casbin | ❌ | Für Google-Protokoll-Puffer |
JSON-Adapter | String | Casbin | ❌ | Für JSON |
String-Adapter | String | @qiangmzsx | ❌ | Für Zeichenkette |
HTTP-Datei-Adapter | HTTP | @h4ckedneko | ❌ | Für http.FileSystem |
FileSystem Adapter | Datei | @naucon | ❌ | Für fs.FS und embed.FS |
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) | File | 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 | ORM | 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 | ORM | @willsoto | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracle werden von Objection.js unterstützt |
MikroORM Adapter | RM | @baisheng | ✅ | MongoDB, MySQL, MariaDB, PostgreSQL, SQLite are supported by MikroORM |
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 is supported by Mongoose |
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 store | @NandaKishorJeripothula | ❌ | For 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 | ORM | 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. are supported by laminas-db |
Zend-db Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft SQL Server, PDO, etc. are supported by zend-db |
ThinkORM Adapter (ThinkPHP) | RM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Oracle, Microsoft SQL Server, MongoDB are supported by ThinkORM |
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 |
Django ORM Adapter | RM | Casbin | ✅ | PostgreSQL, MariaDB, MySQL, Oracle, SQLite, IBM DB2, Microsoft SQL Server, Firebird, ODBC werden von Django ORM unterstützt |
SQLObject Adapter | RM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Microsoft SQL Server, Firebird, Sybase, MAX DB, pyfirebirdsql werden von SQLObject unterstützt |
SQLAlchemy Adapter | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase werden von SQLAlchemy unterstützt |
Async SQLAlchemy Adapter | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by SQLAlchemy |
Async-Datenbank-Adapter | ORM | 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 | ORM | @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 | ORM | @thearchitector | ✅ | PostgreSQL (>=9.4), MySQL, MariaDB und SQLite werden von Tortoise ORM unterstützt |
Async Ormar Adapter | RM | @shepilov-vladislav | ✅ | PostgreSQL, MySQL, SQLite are supported by Ormar |
SQLModel Adapter | RM | @shepilov-vladislav | ✅ | PostgreSQL, MySQL, SQLite are supported by SQLModel |
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 |
Redis Adapter | NoSQL | Casbin | ✅ | For Redis |
GCP Firebase-Adapter | Wolke | @devrushi41 | ✅ | Für Google Cloud Plattform Firebase |
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
EF-Adapter | ORM | Casbin | ❌ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. werden vom Entity Framework 6 unterstützt |
EFCore-Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2 usw. werden vom Entity Framework Core unterstützt |
EFCore Adapter (.NET Core 5) | ORM | @g4dvali | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. are supported by Entity Framework Core |
Linq2DB Adapter | ORM | @Tirael | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, Access, Firebird, Sybase, etc. are supported by linq2db |
Azure Cosmos DB Adapter | Cloud | @sagarkhandelwal | ✅ | For Microsoft Azure Cosmos DB |
Adapter | Typ | Autor | AutoSave | Beschreibung |
---|---|---|---|---|
Datei-Adapter (eingebaut) | Datei | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien |
Diesel-Adapter | ORM | Casbin | ✅ | SQLite, PostgreSQL, MySQL werden von Diesel unterstützt |
Sqlx-Adapter | ORM | Casbin | ✅ | PostgreSQL, MySQL wird von Sqlx mit vollständig asynchroner Operation unterstützt |
SeaORM-Adapter | ORM | @lingdu1234 | ✅ | PostgreSQL, MySQL, SQLite are supported by SeaORM with fully asynchronous operation |
SeaORM Adapter | ORM | @ZihanType | ✅ | PostgreSQL, MySQL, SQLite are supported by SeaORM with fully asynchronous operation |
Rbatis Adapter | ORM | rbatis | ✅ | MySQL, PostgreSQL, SQLite, SQL Server, MariaDB, TiDB, CockroachDB, Oracle are supported by Rbatis |
DynamodDB Adapter | NoSQL | @fospitia | ✅ | For Amazon DynamoDB |
MongoDB Adapter | MongoDB | @wangjun861205 | ✅ | For MongoDB |
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 | ORM | 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 | ORM | 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) | File | Casbin | ❌ | Für .CSV (Comma-Separated Values) Dateien mit Richtlinien-Untermengenunterstützung |
LuaSQL-Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite3 werden von LuaSQL unterstützt |
4DaysORM-Adapter | ORM | Casbin | ✅ | MySQL, SQLite3 werden von 4DaysORM unterstützt |
OpenResty Adapter | ORM | @tom2nonames | ✅ | MySQL, PostgreSQL are supported by it |
- 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:
- Go
- PHP
- Rust
import "github.com/casbin/casbin"
e := casbin.NewEnforcer("examples/basic_model.conf", "examples/basic_policy.csv")
use Casbin\Enforcer;
$e = new Enforcer('examples/basic_model.conf', 'examples/basic_policy.csv');
use casbin::prelude::*;
let mut e = Enforcer::new("examples/basic_model.conf", "examples/basic_policy.csv").await?;
Dies ist das gleiche mit:
- Go
- PHP
- Rust
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)
use Casbin\Enforcer;
use Casbin\Persist\Adapters\FileAdapter;
$a = new FileAdapter('examples/basic_policy.csv');
$e = new Enforcer('examples/basic_model.conf', $a);
use casbin::prelude::*;
let a = 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.
- Go
- Rust
- PHP
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. om/php-casbin/dbal-Adapter
verwenden Casbin\Enforcer;
verwenden CasbinAdapter\DBAL\Adapter als DatabaseAdapter;
$config = [
// Entweder 'driver' mit einem der folgenden Werte:
// pdo_mysql, do_sqlite,pdo_pgsql,pdo_oci (unstable),pdo_sqlsrv,pdo_sqlsrv,
// mysqli,sqlanywhere,sqlsrv,ibm_db2 (unstable), rizzle_pdo_mysql
'driver' => 'pdo_mysql',
'host' => '127. .0.1',
'dbname' => 'test',
'user' => 'root',
'password' => '',
'port' => '3306',
];
$a = DatabaseAdapter::newAdapter($config);
$e = new Enforcer('examples/basic_model. onf', $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()Ihren Adapter von A nach B konvertieren
e.SetAdapter(B)
Richtlinie vom Speicher auf B speichern
e.LoadPolicy()
Laden/Speichern zur Laufzeit
Sie können auch das Modell neu laden, die Richtlinie neu laden oder die Richtlinie nach der Initialisierung speichern:
// Laden Sie das Modell aus der CONF-Datei neu.
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).
- 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 |
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.{
"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