Passer au contenu principal

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:)

AdaptateurType de texteAuteurAutoSaveDescription
Adaptateur de fichiers (intĂ©grĂ©)FichierCasbin❌Pour les fichiers .CSV (valeurs sĂ©parĂ©es par des virgules)
Adaptateur de fichiers filtrĂ© (intĂ©grĂ©)Fichier@faceleless-saint❌Pour les fichiers .CSV (valeurs sĂ©parĂ©es par des virgules) avec le support du chargement des sous-ensembles de stratĂ©gies
Adaptateur SQLSQL@Blank-Xu✅MySQL, PostgreSQL, SQL Server, SQLite3 sont pris en charge dans la branche master et Oracle est supportĂ© dans la branche oracle par database/sql
Adaptateur XormORMCasbin✅MySQL, PostgreSQL, TiDB, SQLite, SQL Server, Oracle sont supportĂ©s par Xorm
GORM AdapterORMCasbin✅MySQL, PostgreSQL, Sqlite3, SQL Server are supported by GORM
GORM Adapter ExORMCasbin✅MySQL, PostgreSQL, Sqlite3, SQL Server are supported by GORM
Adaptateur EntORMCasbin✅Les bases de graphiques MySQL, MariaDB, PostgreSQL, SQLite, Gremlin-based graph sont supportĂ©es par et ORM
Adaptateur ORM BeegoORMCasbin✅MySQL, PostgreSQL, Sqlite3 sont supportĂ©s par Beego ORM
Adaptateur SQLXORM@memwey✅MySQL, PostgreSQL, SQLite, Oracle sont supportĂ©s par SQLX
Adaptateur SqlxORM@Blank-Xu✅MySQL, PostgreSQL, SQL Server, SQLite3 sont pris en charge dans la branche master et Oracle est supportĂ© dans la branche oracle par sqlx
Adaptateur ORM GFORM@vance-liu✅MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM
Adaptateur ORM GoFrameORM@kotlin2018✅MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM
gf-adapterORM@zcyc✅MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM
Gdb AdapterORM@jxo-me✅MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM
GoFrame V2 AdapterORM@hailaz✅MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM
Adaptateur PostgreSQL filtrĂ©SQLCasbin✅Pour PostgreSQL
Adaptateur pgx filtrĂ©SQL@pckhoi✅PostgreSQL est supportĂ© par pgx
Adaptateur PostgreSQLSQL@cychiuae✅Pour PostgreSQL
Adaptateur RQLiteSQLSystùmes EDOMO✅Pour RQLite
MongoDB AdapterNoSQLCasbin✅Pour MongoDB basĂ© sur MongoDB Go Driver
Adaptateur RethinkDBNoSQL@adityapandey9✅Pour RethinkDB
Adaptateur CassandraNoSQLCasbin❌Pour Apache Cassandra DB
Adaptateur DynamoDBNoSQLHOOQ❌Pour Amazon DynamoDB
DynacasbinNoSQLNewbMiao✅Pour Amazon DynamoDB
Adaptateur ArangoDBNoSQL@adamwasila✅Pour ArangoDB
Adaptateur Amazon S3NuageSolution❌Pour Minio et Amazon S3
Adaptateur DB Cosmos AzureNuage@codeur de l'espace✅Pour Microsoft Azure Cosmos DB
Adaptateur de Firestore GCPNuage@reedom❌Pour Google Cloud Platform Firestore
Adaptateur de stockage nuagique GCPNuagequrami❌Pour Google Cloud Platform Cloud Storage
Adaptateur GCP Cloud SpannerNuage@fleurinthenight✅Pour Google Cloud Platform Cloud Spanner
Adaptateur de consommationMagasin KV@ankitm123❌Pour Consommation de HashiCorp
Adaptateur Redis (Redigo)Magasin KVCasbin✅Pour Redis
Adaptateur Redis (go-redis)Magasin KV@mlsen✅Pour Redis
Adaptateur EtcdMagasin KV@sebastianliu❌Pour etcd
Adaptateur BoltDBMagasin KV@speza✅Pour Bolt
Adaptateur BoltMagasin KV@wirepair❌Pour Bolt
Adaptateur BadgerDBMagasin KV@inits✅Pour BadgerDB
Adaptateur ProtobufFluxCasbin❌Pour Google Protocol Buffers
Adaptateur JSONChaüne de caractùresCasbin❌Pour JSON
Adaptateur de chaünes de caractùresChaüne de caractùres@qiangmzsx❌Pour la chaüne de caractùres
Adaptateur de fichiers HTTPHTTP@h4ckedneko❌Pour http.FileSystem
Adaptateur de systùme de fichiersFichier@naucon❌Pour fs.FS et embed.FS
note
  1. Si casbin.NewEnforcer() est appelé avec un adaptateur explicite ou implicite, la politique sera chargée automatiquement.
  2. Vous pouvez appeler e.LoadPolicy() pour recharger les rĂšgles de politique depuis le stockage.
  3. 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 appeler SavePolicy() 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é:

import "github.com/casbin/casbin"

e := casbin.NewEnforcer("examples/basic_model.conf", "examples/basic_policy.csv")

Il en va de mĂȘme avec :

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)

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("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 :

  1. Politique de chargement de A à la mémoire

    e, _ := NewEnforcer(m, A)

    ou

    e.SetAdapter(A)
    e.LoadPolicy()
  2. convertir votre adaptateur de A Ă  B

    e.SetAdapter(B)
  3. Enregistrer la politique de la mémoire dans B

    e.LoadPolicy()

Charger/Enregistrer au moment de l'exĂ©cution​

Vous pouvez Ă©galement recharger le modĂšle, recharger la politique ou enregistrer la politique aprĂšs l'initialisation :

// Recharge 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
  1. La fonctionnalité Sauvegarde automatique est facultative. Un adaptateur peut choisir de l'implémenter ou non.
  2. Auto-Save ne fonctionne que pour un agent de sécurité Casbin lorsque l'adaptateur que le responsable utilise le supporte.
  3. Voir la colonne Sauvegarde automatique dans la liste ci-dessus pour voir si Sauvegarde 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(...)

// Activer l'option 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Ă©thodeType de texteDescription
format@@0 LoadPolicy()mandatoryCharger toutes les rĂšgles de politique du stockage
EnregistrerPolicy()mandatoryEnregistrer toutes les rĂšgles de politique sur le stockage
AddPolicy()optionnelAjouter une rĂšgle de politique au stockage
RemovePolicy()optionalSupprimer une rĂšgle de politique du stockage
RemoveFilteredPolicy()optionalSupprimer 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 (a *Adapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error {
return errors.New("not implemented")
}

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 de p_type ou Ptype.
  • 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.
  • LoadFilteredPolicy nĂ©cessite un filtre en tant que paramĂštre. Le filtre devrait ĂȘtre quelque chose comme ça.
    {
    "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