Adaptateurs
À Casbin, le stockage des politiques est implémenté en tant qu'adaptateur (aka middleware pour Casbin). A Casbin user can use an adapter to load policy rules from a storage (aka LoadPolicy()
), or save policy rules to it (aka SavePolicy()
). Pour garder le poids léger, nous ne plaçons pas le code de l'adaptateur dans la bibliothèque principale.
Adaptateurs supportés
Une liste complète des adaptateurs Casbin est fournie ci-dessous. Toute contribution de tierce partie sur un nouvel adaptateur est la bienvenue, veuillez nous en informer et nous la mettrons dans cette liste:)
Adaptateur | Type de texte | Auteur | AutoSave | Libellé |
---|---|---|---|---|
Adaptateur de fichiers (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) |
Adaptateur JDBC | JDBC | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server sont supportés par JDBC |
Adaptateur Hibernate | ORM | Casbin | ✅ | Oracle, DB2, SQL Server, Sybase, MySQL, PostgreSQL sont supportés par Hibernate |
Adaptateur MyBatis | ORM | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server (le même que JDBC) sont supportés par MyBatis 3 |
Adaptateur Hutool | ORM | @mapleafgo | ✅ | MySQL, Oracle, PostgreSQL, SQLite sont supportés par Hutool |
MongoDB Adapter | NoSQL | Casbin | ✅ | MongoDB est supporté par mongodb-driver-sync |
Adaptateur DynamoDB | NoSQL | Casbin | ❌ | Pour Amazon DynamoDB |
Adaptateur Redis | Magasin KV | Casbin | ✅ | Pour Redis |
Adaptateur | Type de texte | Auteur | AutoSave | Libellé |
---|---|---|---|---|
Adaptateur de fichiers (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) |
Adaptateur de fichiers filtré (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) avec le support du chargement des sous-ensembles de stratégies |
Adaptateur de chaînes de caractères (intégré) | Chaîne de caractères | @calebfaruki | ❌ | Pour la chaîne de caractères |
Adaptateur de base | ORM natif | Casbin | ✅ | pg, mysql, mysql2, sqlite3, oracledb, mssql sont supportés par l'adaptateur lui-même |
Sequelize Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server sont supportés par Sequelize |
Adaptateur TypeORM | ORM | Casbin | ✅ | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB sont supportés par TypeORM |
Adaptateur prisma | ORM | Casbin | ✅ | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, AWS Aurora, Azure SQL sont supportés par Prisma |
Adaptateur Knex | ORM | @sarneeh et genoux | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracle sont supportés par Knex.js |
Adaptateur Objection.js | ORM | @willsoto | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracle sont supportés par Objection.js |
Adaptateur natif PostgreSQL Node | SQL | @touchifyapp | ✅ | Adaptateur PostgreSQL avec un support avancé du chargement des sous-ensembles de règles et des performances améliorées avec node-postgres. |
Adaptateur Mongoose | NoSQL | élastic.io et Casbin | ✅ | MongoDB est supporté par Mongoose |
Adaptateur Mongoose (Sans Transaction) | NoSQL | minhducck | ✅ | MongoDB est supporté par Mongoose |
Adaptateur natif Node MongoDB | NoSQL | @juicycleff | ✅ | Pour Node MongoDB Natif |
Adaptateur DynamoDB | NoSQL | @fospitia | ✅ | Pour Amazon DynamoDB |
Adaptateur Couchbase | NoSQL | @MarkMYoung | ✅ | Pour Couchbase |
Adaptateur Redis | Magasin KV | Casbin | ❌ | Pour Redis |
Adaptateur Redis | Magasin KV | @NandaKishorJeripothula | ❌ | Pour Redis |
Adaptateur | Type de texte | Auteur | AutoSave | Libellé |
---|---|---|---|---|
Adaptateur de fichiers (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) |
Adaptateur de base de données | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server sont supportés par techone/database |
Adaptateur Zend Db | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Oracle, IBM DB2, Microsoft SQL Server, Autre pilote PDO sont supportés par zend-db |
Doctrine adaptateur DBAL (Recommandé) | ORM | Casbin | ✅ | Une puissante couche d'abstraction de base de données PHP (DBAL) avec de nombreuses fonctionnalités pour l'introspection et la gestion du schéma de base de données. |
Adaptateur Medoo | ORM | Casbin | ✅ | Medoo est un framework de base de données PHP léger pour accélérer le développement, supporte toutes les bases de données SQL, y compris MySQL , MSSQL , SQLite , MariaDB , PostgreSQL , Sybase , Oracle et plus. |
Adaptateur laminas-db | ORM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft Sql Server, PDO, etc. sont supportés par laminas-db |
Adaptateur Zend db | ORM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft Sql Server, PDO, etc. sont supportés par zend-db |
Adaptateur Redis | Magasin KV | @nsnake | ❌ | Pour Redis |
Adaptateur | Type de texte | Auteur | AutoSave | Libellé |
---|---|---|---|---|
Adaptateur de fichiers (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) |
Adaptateur SQLAlchemy | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase sont supportés par SQLAlchemy |
Adaptateur de bases de données Async | ORM | Sampingantech | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase sont supportés par les bases de données |
Adaptateur Peewee | ORM | @shblhy | ✅ | PostgreSQL, MySQL, SQLite sont supportés par Peewee |
Adaptateur MongoEngine | ORM | @zhangbailong945 | ❌ | MongoDB est supporté par MongoEngine |
Adaptateur Pony ORM | ORM | @drorvinkler | ✅ | MySQL, PostgreSQL, SQLite, Oracle, CockroachDB sont supportés par Pony ORM |
Adaptateur ORM Tortoise | ORM | @thearchitecteur | ✅ | PostgreSQL (>=9.4), MySQL, MariaDB et SQLite sont supportés par Tortoise ORM |
Adaptateur Couchbase | NoSQL | ScienceLogique | ✅ (sans remove_filtered_policy() ) | Pour Couchbase |
Adaptateur DynamoDB | NoSQL | @abqadeer | ✅ | Pour DynamoDB |
Adaptateur Pymongo | NoSQL | Casbin | ❌ | MongoDB est supporté par Pymongo |
Adaptateur Firebase GCP | Nuage | @devrushi41 | ✅ | Pour Google Cloud Platform Firebase |
Async ormar Adapter | ORM | sampingantech | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by ormar |
Adaptateur | Type de texte | Auteur | AutoSave | Libellé |
---|---|---|---|---|
Adaptateur de fichiers (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) |
Adaptateur EF | ORM | Casbin | ❌ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. sont supportés par Entity Framework 6 |
Adaptateur EFCore | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. sont supportés par Entity Framework Core |
Adaptateur EFCore (.NET Core 5) | ORM | @g4dvali | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. sont supportés par Entity Framework Core |
Adaptateur | Type de texte | Auteur | AutoSave | Libellé |
---|---|---|---|---|
Adaptateur de fichiers (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) |
Adaptateur Diesel | ORM | Casbin | ✅ | SQLite, PostgreSQL, MySQL sont supportés par Diesel |
Adaptateur Sqlx | ORM | Casbin | ✅ | PostgreSQL, MySQL est supporté par Sqlx avec une opération totalement asynchrone |
Adaptateur de mer | ORM | format@@0 lingdu1234 | ✅ | PostgreSQL, MySQL est supporté par SeaORM avec une opération totalement asynchrone |
Adaptateur JSON | Chaîne de caractères | Casbin | ✅ | Pour JSON |
Adaptateur YAML | Chaîne de caractères | Casbin | ✅ | Pour YAML |
Adaptateur | Type de texte | Auteur | AutoSave | Libellé |
---|---|---|---|---|
Adaptateur de fichiers (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) |
Sequel Adaptateur | ORM | CasbinRuby | ✅ | ADO, Amalgalite, IBM_DB, JDBC, MySQL, Mysql2, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite3 et TinyTDS sont supportés par Séquel |
Adaptateur | Type de texte | Auteur | AutoSave | Libellé |
---|---|---|---|---|
Adaptateur de fichiers (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) |
Adaptateur de mémoire (intégré) | Mémoire | Casbin | ❌ | Pour la mémoire |
Adaptateur fluide | ORM | Casbin | ✅ | PostgreSQL, SQLite, MySQL, MongoDB sont supportés par Fluent |
Adaptateur | Type de texte | Auteur | AutoSave | Libellé |
---|---|---|---|---|
Adaptateur de fichiers (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) |
Adaptateur de fichiers filtré (intégré) | Fichier | Casbin | ❌ | Pour les fichiers .CSV (valeurs séparées par des virgules) avec le support du chargement des sous-ensembles de stratégies |
Adaptateur LuaSQL | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite3 sont supportés par LuaSQL |
Adapteur 4DaysORM | ORM | Casbin | ✅ | MySQL, SQLite3 sont supportés par 4DaysORM |
note
- Si
casbin.NewEnforcer()
est appelé avec un adaptateur explicite ou implicite, la politique sera chargée automatiquement. - Vous pouvez appeler
e.LoadPolicy()
pour recharger les règles de politique depuis le stockage. - Si l'adaptateur ne supporte pas la fonctionnalité
Sauvegarde automatique
, Les règles de politique ne peuvent pas être sauvegardées automatiquement sur le stockage lorsque vous ajoutez ou supprimez des règles. Vous devez appelerSavePolicy()
manuellement pour enregistrer toutes les règles de la politique.
Exemples
Nous fournissons ici plusieurs exemples:
Adaptateur de fichier (intégré)
Ci-dessous montre comment initialiser un responsable à partir de l'adaptateur de fichier intégré:
importez "github.com/casbin/casbin"
e := casbin.NewEnforcer("exemples/basic_model.conf", "exemples/basic_policy.csv")
utiliser Casbin\Enforcer;
$e = new Enforcer('examples/basic_model.conf', 'examples/basic_policy.csv');
utiliser casbin::prelude::*;
let mut e = Enforcer::new("examples/basic_model.conf", "examples/basic_policy.csv").await?;
Il en va de même avec :
import (
"github.com/casbin/casbin"
"github.com/casbin/casbin/file-adapter"
)
a := fileadapter.NewAdapter("exemples/basic_policy.csv")
e := casbin.NewEnforcer("examples/basic_model.conf", a)
utiliser Casbin\Enforcer;
utiliser Casbin\Persist\Adapters\FileAdapter;
$a = new FileAdapter('examples/basic_policy.csv');
$e = new Enforcer('examples/basic_model.conf', $a);
utiliser casbin::prelude::*;
let a = FileAdapter::new("examples/basic_policy.csv");
let e = Enforcer::new("examples/basic_model.conf", a).await?;
MySQL adapter
Voici comment initialiser un responsable de la base de données MySQL. il se connecte à une base de données MySQL en 127.0.0.1:3306 avec un mot de passe root et vide.
import (
"github.com/casbin/casbin"
"github.com/casbin/mysql-adapter"
)
a := mysqladapter.NewAdapter("mysql", "root:@tcp(127.0.0.1:3306)/")
e := casbin.NewEnforcer("exemples/basic_model.conf", a)
// https://github. om/casbin-rs/diesel-adapter
// assurez-vous d'activer la fonctionnalité `mysql`
utilisez casbin::prelude::*;
utilisez diesel_adapter::{ConnOptions, DieselAdapter};
let mut conn_opts = ConnOptions::default();
conn_opts
. et_hostname("127.0.0.1")
. et_port(3306)
.set_host("127.0.0.1:3306") // écrase le nom d'hôte, la configuration du port
.set_database("casbin")
. 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);
Utilisez votre propre adaptateur de stockage
Vous pouvez utiliser votre propre adaptateur comme ci-dessous:
import (
"github.com/casbin/casbin"
"github.com/your-username/your-repo"
)
a := yourpackage.NewAdapter(params)
e := casbin.NewEnforcer("examples/basic_model.conf", a)
Migrer/Convertir entre différents adaptateurs
Si vous voulez convertir l'adaptateur de A
à B
, vous pouvez le faire comme ceci :
- Politique de chargement de A à la mémoire
e, _ := NewEnforcer(m, A)
ou
e.SetAdapter(A)
e.LoadPolicy()
convertissez votre adaptateur de A à B
e.SetAdapter(B)
Enregistrer la politique de la mémoire dans B
. oadPolicy()
Charger/Enregistrer à l'exécution
Vous pouvez également recharger le modèle, recharger la charte ou enregistrer la charte après l'initialisation :
// Recharger le modèle à partir du fichier CONF du modèle.
e.LoadModel()
// Recharge la charte à partir de fichier/base de données.
e.LoadPolicy()
// Sauvegarde la politique actuelle (généralement après avoir été modifiée avec l'API Casbin) dans fichier/base de données.
e.SavePolicy()
AutoSave
Il y a une fonctionnalité appelée Auto-Save
pour les adaptateurs. Lorsqu'un adaptateur prend en charge Auto-Save
, cela signifie qu'il peut soutenir l'ajout d'une règle de politique unique au stockage, ou la suppression d'une règle de politique unique du stockage. C'est à la différence de SavePolicy()
, parce que ce dernier supprimera toutes les règles de politique dans le stockage et sauvegardera toutes les règles de politique de Casbin pour le stockage. Elle peut donc être confrontée à des problèmes de performance lorsque le nombre de règles de politique est important.
Lorsque l'adaptateur prend en charge Auto-Save
, vous pouvez basculer cette option via la fonction Enforcer.EnableAutoSave()
. L'option est activée par défaut (si l'adaptateur le supporte).
note
- La fonctionnalité
Sauvegarde automatique
est facultative. Un adaptateur peut choisir de l'implémenter ou non. Auto-Save
ne fonctionne que pour un agent de sécurité Casbin lorsque l'adaptateur que le responsable utilise le supporte.- Voir la colonne
Sauvegarde automatique
dans la liste ci-dessus pour voir siSauvegarde automatique
est prise en charge par un adaptateur.
Voici un exemple sur la façon d'utiliser Auto-Save
:
import (
"github.com/casbin/casbin"
"github.com/casbin/xorm-adapter"
_ "github.com/go-sql-driver/mysql"
)
// Par défaut, l'option de sauvegarde automatique est activée pour un responsable.
a := xormadapter.NewAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.1:3306)/")
e := casbin.NewEnforcer("examples/basic_model.conf", a)
// Désactive l'option de sauvegarde automatique.
e.EnableAutoSave(false)
// Parce que la sauvegarde automatique est désactivée, le changement de politique n'affecte que la politique dans Casbin enforcer,
// cela n'affecte pas la politique dans le stockage.
e.AddPolicy(...)
e.RemovePolicy(...)
// Active l'option de sauvegarde automatique.
e.EnableAutoSave(true)
// Parce que la sauvegarde automatique est activée, le changement de politique affecte non seulement la politique de l'application de Casbin,
// mais affecte également la politique dans le stockage.
e.AddPolicy(...)
e.RemovePolicy(...)
Pour plus d’exemples, veuillez voir : https://github.com/casbin/xorm-adapter/blob/master/adapter_test.go
Comment écrire un adaptateur
Tous les adaptateurs doivent implémenter l'interface Adapter en fournissant au moins deux méthodes obligatoires :LoadPolicy(modèle modèle. odel) erreur
et erreur SavePolicy(model model.Model)
.
Les trois autres fonctions sont facultatives. Ils devraient être implémentés si l'adaptateur prend en charge la fonctionnalité Sauvegarde automatique
.
Méthode | Type de texte | Libellé |
---|---|---|
format@@0 LoadPolicy() | mandatory | Charger toutes les règles de politique du stockage |
EnregistrerPolicy() | mandatory | Enregistrer toutes les règles de politique sur le stockage |
AddPolicy() | optionnel | Ajouter une règle de politique au stockage |
RemovePolicy() | optionnel | Supprimer une règle de politique du stockage |
RemoveFilteredPolicy() | optionnel | Supprimer les règles de politique qui correspondent au filtre du stockage |
note
Si un adaptateur ne supporte pas Auto-Save
, il devrait fournir une implémentation vide pour les trois fonctions optionnelles. Voici un exemple pour Golang :
// AddPolicy ajoute une règle de politique au stockage.
func (un *Adapter) AddPolicy(sec string, ptype string, rule []string) erreur {
retourne des erreurs. ew("non implémenté")
}
// Supprime une règle de politique du stockage.
func (un *Adapter) RemovePolicy(sec string, ptype string, rule []string) erreur {
retourne des erreurs. ew("non implémenté")
}
// RemoveFilteredPolicy supprime les règles de régulation qui correspondent au filtre du stockage.
func (un *Adapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) erreur {
return errors.New("non implémenté")
}
Casbin enforcer ignorera l'erreur non implémentée
lors de l'appel de ces trois fonctions optionnelles.
Il y a des détails sur la façon d'écrire un adaptateur.
- Structure des données. L'adaptateur devrait prendre en charge la lecture à au moins six colonnes.
- Nom de la base de données. Le nom de la base de données par défaut doit être
casbin
. - Nom de la table. Le nom de la table par défaut doit être
casbin_rule
. - Colonne Ptype. Le nom de cette colonne doit être
ptype
au lieu dep_type
ouPtype
. - La définition de la table doit être
(id int clé primaire, ptype varchar, v0 varchar, v1 varchar, v2 varchar, v3 varchar, v4 varchar, v5 varchar)
. - L'index de clé unique doit être construit sur les colonnes
ptype,v0,v1,v2,v3,v4,v5
. Filtré par charge
nécessite un filtre `` en tant que paramètre. Le filtre devrait être quelque chose comme ça. json { "p":[ "alice" ], [ "bob" ] ], "g":[ [ "", "book_group" ], [ "", "pen_group" ] ], "g2":[ [ "alice" ] ] }
Qui est responsable de la création de la DB?
Comme convention, l'adaptateur devrait être en mesure de créer automatiquement une base de données nommée casbin
si elle n'existe pas et l'utiliser pour le stockage de la politique. Veuillez utiliser l'adaptateur Xorm comme implémentation de référence : https://github.com/casbin/xorm-adapter