アダプター
Casbinでは、ポリシーストレージはアダプタ(別名、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()
). 重量を保つため、メインライブラリにアダプターコードは入れません。
サポートされているアダプター
Casbinアダプタの完全なリストは以下のとおりです。 新しいアダプターに対するサードパーティの貢献を歓迎します。お知らせください。このリストに記載されています:)
- Go
- Java
- Node.js
- PHP
- Python
- .NET
- Rust
- Ruby
- Swift
- Lua
Adapter | タイプ | 作成者 | AutoSave | 説明 |
---|---|---|---|---|
ファイルアダプター(内蔵) | ファイル | Casbin | ❌ | .CSV (カンマ区切り値) ファイル用 |
JDBC アダプター | JDBC | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server は JDBC によってサポートされています |
Hibernateアダプター | ORM | Casbin | ✅ | Oracle, DB2, SQL Server, Sybase, MySQL, PostgreSQLは Hibernate でサポートされています |
MyBatisアダプター | ORM | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server (JDBCと同じ) は MyBatis 3 でサポートされています |
ヒューツールアダプター | ORM | @mapleafgo | ✅ | MySQL, Oracle, PostgreSQL, SQLite は Hutool でサポートされています |
MongoDB Adapter | NoSQL | Casbin | ✅ | MongoDB は mongodb-driver-sync でサポートされています |
DynamoDBアダプター | NoSQL | Casbin | ❌ | Amazon DynamoDB 用 |
Redisアダプター | KV ストア | Casbin | ✅ | Redis 用 |
Adapter | タイプ | 作成者 | AutoSave | 説明 |
---|---|---|---|---|
ファイルアダプター(内蔵) | ファイル | Casbin | ❌ | .CSV (カンマ区切り値) ファイル用 |
フィルタされたファイルアダプタ(内蔵) | File | Casbin | ❌ | ポリシーサブセット読み込みサポートを持つ .CSV (カンマ区切り値) ファイルの場合 |
ストリングアダプター(内蔵) | 文字列 | @calebfaruki | ❌ | For String |
基本アダプター | ネイティブ ORM | Casbin | ✅ | pg、mysql、mysql2、sqlite3、oracledb、mssqlはアダプタ自体でサポートされています |
シーケンスアダプター | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server は Sequelize でサポートされています |
TypeORMアダプター | ORM | Casbin | ✅ | MySQL、PostgreSQL、MariaDB、SQLite、MS SQL Server、Oracle、WebSQL、MongoDBは TypeORM でサポートされています |
プリズマアダプター | ORM | Casbin | ✅ | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, AWS Aurora, Azure SQL は Prisma でサポートされています |
Knex アダプター | ORM | knex | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracleは Knex.js でサポートされています |
Objection.js アダプター | ORM | @willsoto | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracleは Objection.js でサポートされています |
MikroORM Adapter | ORM | @baisheng | ✅ | MongoDB, MySQL, MariaDB, PostgreSQL, SQLite are supported by MikroORM |
ノードPostgreSQLネイティブアダプター | SQL | @touchifyapp | ✅ | 高度なポリシーサブセット読み込みサポートと ノード-postgresで構築されたパフォーマンスの向上を備えたPostgreSQLアダプタ。 |
Mongoose アダプター | NoSQL | elastic.io と Casbin | ✅ | MongoDB は Mongoose でサポートされています |
Mongoose Adapter (No-Transaction) | NoSQL | minhducck | ✅ | MongoDB is supported by Mongoose |
ノードMongoDB ネイティブアダプター | NoSQL | @juicycleff | ✅ | Node MongoDB Native |
DynamoDBアダプター | NoSQL | @fospitia | ✅ | Amazon DynamoDB 用 |
Couchbase アダプター | NoSQL | @MarkMYoung | ✅ | Couchbase 用 |
Redisアダプター | KV ストア | Casbin | ❌ | Redis 用 |
Redis Adapter | KV store | @NandaKishorJeripothula | ❌ | For Redis |
Adapter | タイプ | 作成者 | AutoSave | 説明 |
---|---|---|---|---|
ファイルアダプター(内蔵) | ファイル | Casbin | ❌ | .CSV (カンマ区切り値) ファイル用 |
データベースアダプター | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server は techone/database でサポートされています |
Zend Db アダプター | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Oracle, IBM DB2, Microsoft SQL Server, その他のPDOドライバは zend-db でサポートされています |
Doctrine DBAL アダプタ(推奨) | ORM | Casbin | ✅ | データベーススキーマのイントロスペクションと管理のための多くの機能を備えた強力なPHPデータベース抽象レイヤー(DBAL) 。 |
メドゥーアダプター | ORM | Casbin | ✅ | Medoo is a lightweight PHP Database Framework to Accelerate Development, supports all SQL databases, including MySQL , MSSQL , SQLite , MariaDB , PostgreSQL , Sybase , Oracle and more. |
Laminas-db アダプター | ORM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft SQL Server, PDO, etc. are supported by laminas-db |
Zend-db アダプター | ORM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft SQL Server, PDO, etc. are supported by zend-db |
ThinkORM Adapter (ThinkPHP) | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Oracle, Microsoft SQL Server, MongoDB are supported by ThinkORM |
Redisアダプター | KV ストア | @nsnake | ❌ | Redis 用 |
Adapter | タイプ | 作成者 | AutoSave | 説明 |
---|---|---|---|---|
ファイルアダプター(内蔵) | ファイル | Casbin | ❌ | .CSV (カンマ区切り値) ファイル用 |
Django ORMアダプター | ORM | Casbin | ✅ | PostgreSQL, MariaDB, MySQL, Oracle, SQLite, IBM DB2, Microsoft SQL Server, Firebird, ODBC は Django ORM でサポートされています |
SQLObject アダプター | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Microsoft SQL Server, Firebird, Sybase, MAX DB, pyfirebirdsql は SQLObject でサポートされています。 |
SQLAlchemy アダプター | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase は SQLAlchemy でサポートされています |
Async SQLAlchemy Adapter | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by SQLAlchemy |
非同期データベースアダプター | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase は データベース でサポートされています |
Peewee アダプター | ORM | @shblhy | ✅ | PostgreSQL, MySQL, SQLite は Peewee でサポートされています |
MongoEngine アダプター | ORM | @zhangbailong945 | ❌ | MongoDB は MongoEngine でサポートされています |
ポニーORMアダプター | ORM | @drorvinkler | ✅ | MySQL、PostgreSQL、SQLite、Oracle、CockroachDBは ポニーORMでサポートされています |
カメORMアダプター | ORM | @thearchitector | ✅ | PostgreSQL (>=9.4), MySQL, MariaDB, SQLite は Tortoise ORM でサポートされています |
Async Ormar Adapter | ORM | @shepilov-vladislav | ✅ | PostgreSQL, MySQL, SQLite are supported by Ormar |
SQLModel Adapter | ORM | @shepilov-vladislav | ✅ | PostgreSQL, MySQL, SQLite are supported by SQLModel |
Couchbase アダプター | NoSQL | ScienceLogic | ✅ ( remove_filtered_policy() なし) | Couchbase 用 |
DynamoDBアダプター | NoSQL | @abqadeer | ✅ | DynamoDB 用 |
Pymongoアダプター | NoSQL | Casbin | ❌ | MongoDB は Pymongo でサポートされています |
Redis Adapter | KV store | Casbin | ✅ | For Redis |
GCP Firebase アダプター | クラウド | @devrushi41 | ✅ | Google Cloud Platform Firebase |
Adapter | タイプ | 作成者 | AutoSave | 説明 |
---|---|---|---|---|
ファイルアダプター(内蔵) | ファイル | Casbin | ❌ | .CSV (カンマ区切り値) ファイル用 |
EFアダプター | ORM | Casbin | ❌ | MySQL、PostgreSQL、SQLite、Microsoft SQL Server、Oracle、DB2などが Entity Framework 6 |
EFCore アダプター | ORM | Casbin | ✅ | MySQL、PostgreSQL、SQLite、Microsoft SQL Server、Oracle、DB2などが 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 | タイプ | 作成者 | AutoSave | 説明 |
---|---|---|---|---|
ファイルアダプター(内蔵) | ファイル | Casbin | ❌ | .CSV (カンマ区切り値) ファイル用 |
ディーゼルアダプター | ORM | Casbin | ✅ | SQLite, PostgreSQL, MySQL は ディーゼル でサポートされています |
Sqlx アダプター | ORM | Casbin | ✅ | PostgreSQL, MySQL は Sqlx によってサポートされており、完全非同期操作が可能です。 |
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アダプター | 文字列 | Casbin | ✅ | JSON 用 |
YAML アダプター | String | Casbin | ✅ | YAML 用 |
Adapter | タイプ | 作成者 | AutoSave | 説明 |
---|---|---|---|---|
ファイルアダプター(内蔵) | ファイル | Casbin | ❌ | .CSV (カンマ区切り値) ファイル用 |
連続アダプター | ORM | CasbinRuby | ✅ | ADO, Amagalite, IBM_DB, JDBC, MySQL, MySQL2, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite3, および TinyTDS がサポートしています シーケンス |
Adapter | タイプ | 作成者 | AutoSave | 説明 |
---|---|---|---|---|
ファイルアダプター(内蔵) | ファイル | Casbin | ❌ | .CSV (カンマ区切り値) ファイル用 |
メモリー・アダプター(内蔵) | メモリ | Casbin | ❌ | メモリ用 |
Fluent アダプター | ORM | Casbin | ✅ | PostgreSQL, SQLite, MySQL, MongoDB は Fluent でサポートされています |
Adapter | タイプ | 作成者 | AutoSave | 説明 |
---|---|---|---|---|
ファイルアダプター(内蔵) | ファイル | Casbin | ❌ | .CSV (カンマ区切り値) ファイル用 |
フィルタされたファイルアダプタ(内蔵) | File | Casbin | ❌ | ポリシーサブセット読み込みサポートを持つ .CSV (カンマ区切り値) ファイルの場合 |
LuaSQLアダプター | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite3 are supported by LuaSQL |
4DaysORMアダプター | ORM | Casbin | ✅ | MySQL, SQLite3は 4DaysORMでサポートされています |
OpenResty Adapter | ORM | @tom2nonames | ✅ | MySQL, PostgreSQL are supported by it |
casbin.NewEnforcer()
が明示的または暗黙的なアダプタで呼び出された場合、ポリシーは自動的に読み込まれます。e.LoadPolicy()
を呼び出して、ポリシーのルールをストレージから再読み込みできます。- アダプターが
自動保存
機能をサポートしていない場合。 ポリシーを追加または削除すると、ポリシールールはストレージに自動的に保存されません。 すべてのポリシールールを保存するには、SavePolicy()
を手動で呼び出す必要があります。
例
ここではいくつかの例を示します:
ファイルアダプター(内蔵)
以下は、組み込みのファイルアダプターからエンフォーサーを初期化する方法です。
- 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?;
これは以下と同じです。
- 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
以下に、MySQL データベースからエンフォーサーを初期化する方法を示します。 127.0.0.1:3306のMySQL DBにrootと空白のパスワードで接続します。
- 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.com/casbin-rs/diesel-adapter
// make sure you activate feature `mysql`
use casbin::prelude::*;
use diesel_adapter::{ConnOptions, DieselAdapter};
let mut conn_opts = ConnOptions::default();
conn_opts
.set_hostname("127.0.0.1")
.set_port(3306)
.set_host("127.0.0.1:3306") // overwrite hostname, port config
.set_database("casbin")
.set_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);
独自のストレージアダプターを使用する
以下のような独自のアダプターを使用できます。
import (
"github.com/casbin/casbin"
"github.com/your-username/your-repo"
)
a := yourpackage.NewAdapter(params)
e := casbin.NewEnforcer("examples/basic_model.conf", a)
異なるアダプター間で移行/変換
アダプターを A
から B
に変換したい場合は、次のようにします。
A からメモリへのポリシーの読み込み
e, _ := NewEnforcer(m, A)
または
e.SetAdapter(A)
e.LoadPolicy()アダプターをAからBに変換する
e.SetAdapter(B)
ポリシーをメモリからBに保存
e.SavePolicy()
実行時に読み込み/保存
モデルを再読み込みしたり、ポリシーを再読み込みしたり、初期化後にポリシーを保存したりすることもできます。
// CONFファイルからモデルをリロードします。
e.LoadModel()
// ファイル/データベースからポリシーを再読み込みします。
e.LoadPolicy()
// 現在のポリシー(通常はCasbin APIで変更後)をファイル/データベースに保存します。
e.SavePolicy()
AutoSave
アダプターには 自動保存
という機能があります。 アダプターが 自動保存
をサポートしている場合 ストレージに単一のポリシールールを追加したり、ストレージから単一のポリシールールを削除したりすることができます。 これは SavePolicy()
とは違います 後者は、ストレージ内のすべてのポリシールールを削除し、Casbinエンフォーサーからストレージにすべてのポリシールールを保存するためです。 したがって、ポリシールールの数が多い場合、パフォーマンスの問題が発生する可能性があります。
アダプターが Auto-Save
をサポートしている場合、 Enforcer.EnableAutoSave()
関数を使用してこのオプションを切り替えることができます。 このオプションはデフォルトで有効になっています(アダプターがサポートしている場合)。
自動保存
機能は任意です。 アダプターは実装するかどうかを選択できます。自動保存
は、エンフォーサーが使用するアダプターがサポートしている場合にのみ動作します。自動保存
がアダプターによってサポートされているかどうかについては、上のアダプターリストの自動保存
列を参照してください。
自動保存
の使い方の例を以下に示します。
import (
"github.com/casbin/casbin"
"github.com/casbin/xorm-adapter"
_ "github.com/go-sql-driver/mysql"
)
// デフォルトでは、AutoSave オプションがエンフォーサーに対して有効になっています。
a := xormadapter.NewAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0.1:3306)/")
e := casbin.NewEnforcer("examples/basic_model.conf", a)
// 自動保存オプションを無効にします。
e.EnableAutoSave(false)
// Because AutoSave is disabled, the policy change only affects the policy in Casbin enforcer,
// it doesn't affect the policy in the storage.
e.AddPolicy(...)
e.RemovePolicy(...)
// Enable the AutoSave option.
e.EnableAutoSave(true)
// Because AutoSave is enabled, the policy change not only affects the policy in Casbin enforcer,
// but also affects the policy in the storage.
e.AddPolicy(...)
e.RemovePolicy(...)
For more examples, please see: https://github.com/casbin/xorm-adapter/blob/master/adapter_test.go
アダプターの書き込み方法
All adapters should implement the Adapter interface by providing at least two mandatory methods:LoadPolicy(model model.Model) error
and SavePolicy(model model.Model) error
.
他の3つの関数は任意です。 アダプターが Auto-Save
機能をサポートしている場合は、実装する必要があります。
方法 | タイプ | 説明 |
---|---|---|
LoadPolicy() | mandatory | ストレージからすべてのポリシールールを読み込む |
SavePolicy() | mandatory | すべてのポリシールールをストレージに保存 |
AddPolicy() | 省略可能 | ストレージにポリシールールを追加 |
削除ポリシー() | optional | ストレージからポリシールールを削除 |
RemoveFilterPolicy() | optional | ストレージからフィルタに一致するポリシールールを削除 |
アダプターが Auto-Save
をサポートしていない場合は、3 つのオプション関数について空の実装を提供する必要があります。 以下はGolangの例です。
// AddPolicy がストレージにポリシールールを追加します。
func (a *Adapter) AddPolicy(sec string, ptype string, rule []string) error {
return errors.New("not implemented")
}
// RemovePolicy removes a policy rule from the storage.
func (a *Adapter) RemovePolicy(sec string, ptype string, rule []string) error {
return errors.New("not implemented")
}
// RemoveFilteredPolicy removes policy rules that match the filter from the storage.
func (a *Adapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error {
return errors.New("not implemented")
}
Casbin エンフォーサーは、これらの 3 つのオプション関数を呼び出すときに、 実装されていない
エラーを無視します。
アダプターの書き方についての詳細があります。
データ構造 アダプターは、 ** 6列以上の読み取りをサポートする必要があります。
データベース名 デフォルトのデータベース名は
casbin
でなければなりません。テーブル名 デフォルトのテーブル名は
casbin_rule
でなければなりません。型の列。 この列の名前は
p_type
またはP_type
の代わりにptype
でなければなりません。テーブル定義は
(id int primary key, ptype varchar, v0 varchar, v1 varchar, v2 varchar, v3 varchar, v4 varchar, v5 varchar)
でなければなりません。ユニークなキーインデックスは、列
ptype,v0,v1,v2,v3,v4,v5
上に構築する必要があります。LoadFilteredPolicy
はパラメータとしてフィルター
を必要とします。 フィルタは次のようなものでなければなりません。{
"p":[ [ "alice" ], [ "bob" ] ],
"g":[ [ "", "book_group" ], [ "", "pen_group" ] ],
"g2":[ [ "alice" ] ]
}
誰がDBを作成する責任がありますか?
慣例として、 アダプターが存在しない場合は、自動的に カビン
という名前のデータベースを作成し、ポリシーストレージに使用する必要があります。 Please use the Xorm adapter as a reference implementation: https://github.com/casbin/xorm-adapter
Context Adapter
ContextAdapter provides a context-aware interface for Casbin adapters.
Through context, you can implement features such as timeout control for the Adapter API
Example
gormadapter supports adapter with context, the following is a timeout control implemented using context
ca, _ := NewContextAdapter("mysql", "root:@tcp(127.0.0.1:3306)/", "casbin")
// Limited time 300s
ctx, cancel := context.WithTimeout(context.Background(), 300*time.Microsecond)
defer cancel()
err := ca.AddPolicyCtx(ctx, "p", "p", []string{"alice", "data1", "read"})
if err != nil {
panic(err)
}
How to write an context adapter
ContextAdapter
API only has an extra layer of context processing than ordinary Adapter
API, and on the basis of implementing ordinary Adapter API, you can encapsulate your own processing logic for context
A simple reference to the gormadapter
: context_adapter.go