Адаптеры
В Касбине хранилища политики реализованы как адаптер (aka middleware for Casbin). Пользователь Casbin может использовать адаптер для загрузки правил политики хранения (aka LoadPolicy()
), или сохранить правила политики к ней (aka SavePolicy()
). Чтобы сохранить легкий вес, мы не ставим код адаптера в основную библиотеку.
Поддерживаемые адаптеры
Полный список адаптеров Casbin приводится ниже. Любой вклад сторонних разработчиков на новом адаптере приветствуется, пожалуйста, сообщите нам, и мы поместим его в этот список:)
- Go
- Java
- Node.js
- PHP
- Python
- .NET
- Rust
- Ruby
- Swift
- Lua
Адаптер | Тип | Автор | AutoSave | Описание |
---|---|---|---|---|
Файл адаптер (встроенный) | Файл | Casbin | ❌ | Для .CSV (запятые значения) файлов |
Адаптер JDBC | JDBC | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server поддерживаются JDBC |
Спящий адаптер | ORM | Casbin | ✅ | Oracle, DB2, SQL Server, Sybase, MySQL, PostgreSQL поддерживаются Hibernate |
Мибатис Адаптер | 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 |
Динамический адаптер | NoSQL | Casbin | ❌ | Для Amazon DynamoDB |
Адаптер Redis | Магазин KV | Casbin | ✅ | Для Redis |
Адаптер | Тип | Автор | AutoSave | Описание |
---|---|---|---|---|
Файл адаптер (встроенный) | Файл | Casbin | ❌ | Для .CSV (запятые значения) файлов |
Фильтрованный файловый адаптер (встроенный) | File | Casbin | ❌ | Для .CSV (Значения, разделенные запятыми) файлов с поддержкой загрузки подмножеств политики |
Адаптер строки (встроенный) | Строка | @calebfaruki | ❌ | Для строки |
Базовый адаптер | Родной ORM | Casbin | ✅ | pg, mysql, mysql2, sqlite3, oracledb, mssql поддерживает сам адаптер |
Последовательный адаптер | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server поддерживаются Последовательность |
Адаптер 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 |
Адаптер K | ORM | @sarneeh и тыс. | ✅ | 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 | ✅ | PostgreSQL адаптер с поддержкой расширенной загрузки подмножества политик и улучшенной производительности, построенной на node-postgres. |
Адаптер Монгозы | NoSQL | elastic.io и Касбин | ✅ | MongoDB поддерживается Mongoose |
Адаптер Монгозы (Без транзакции) | NoSQL | minhducck | ✅ | MongoDB is supported by Mongoose |
Узел MongoDB Родной адаптер | NoSQL | @juicycleff | ✅ | Для родина узла MongoDB |
Динамический адаптер | NoSQL | @fospitia | ✅ | Для Amazon DynamoDB |
Адаптер базы купонов | NoSQL | @MarkMYoung | ✅ | Для Купона |
Адаптер Redis | Магазин KV | Casbin | ❌ | Для Redis |
Redis Adapter | KV store | @NandaKishorJeripothula | ❌ | For Redis |
Адаптер | Тип | Автор | 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, Other PDO Driver поддерживаются zend-db |
Доктрин DBAL адаптер (рекомендуется) | ORM | Casbin | ✅ | Мощный абстрактный уровень PHP (DBAL) с множеством функций для управления схемой баз данных. |
Adapter Medoo | ORM | Casbin | ✅ | Medoo - это легкий фреймворк базы данных PHP для ускорения разработки, поддерживает все базы данных SQL, включая MySQL , MSSQL , SQLite , MariaDB , PostgreSQL , Sybase , Oracle и больше. |
Адаптер 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 |
Адаптер | Тип | Автор | 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 | отборник | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase поддерживаются базами данных |
Peewee адаптер | ORM | @shblhy | ✅ | PostgreSQL, MySQL, SQLite поддерживается Peewee |
Адаптер MongoEngine | ORM | @zhangbailong945 | ❌ | MongoDB поддерживается MongoEngine |
Адаптер Pony ORM | ORM | @drorvinkler | ✅ | MySQL, PostgreSQL, SQLite, Oracle, CockroachDB поддерживаются Pony 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 |
Адаптер базы купонов | NoSQL | Логика | ✅ (без remove_filtered_policy() ) | Для Купона |
Динамический адаптер | NoSQL | @abqadeer | ✅ | Для DynamoDB |
Адаптер Пимонго | NoSQL | Casbin | ❌ | MongoDB поддерживается Pymongo |
Redis Adapter | NoSQL | Casbin | ✅ | For Redis |
GCP адаптер огненной базы | Облако | @devrushi41 | ✅ | Для Google Cloud Platform Firebase |
Адаптер | Тип | Автор | 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 |
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 |
Адаптер | Тип | Автор | AutoSave | Описание |
---|---|---|---|---|
Файл адаптер (встроенный) | Файл | Casbin | ❌ | Для .CSV (запятые значения) файлов |
Адаптер дизеля | ORM | Casbin | ✅ | SQLite, PostgreSQL, MySQL поддерживается дизелем |
Адаптер Sqlx | ORM | Casbin | ✅ | PostgreSQL, MySQL поддерживается Sqlx с полностью асинхронной операцией |
Морской адаптер | 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 |
Адаптер | Тип | Автор | AutoSave | Описание |
---|---|---|---|---|
Файл адаптер (встроенный) | Файл | Casbin | ❌ | Для .CSV (запятые значения) файлов |
Адаптер последовательности | ORM | CasbinRuby | ✅ | ADO, Amalgalite, IBM_DB, JDBC, MySQL, Mysql2, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite3 и TinyTDS поддерживаются Sequel |
Адаптер | Тип | Автор | AutoSave | Описание |
---|---|---|---|---|
Файл адаптер (встроенный) | Файл | Casbin | ❌ | Для .CSV (запятые значения) файлов |
Адаптер памяти (встроенный) | Память | Casbin | ❌ | За память |
Флюантовый адаптер | ORM | Casbin | ✅ | PostgreSQL, SQLite, MySQL, MongoDB поддерживаются Fluent |
Адаптер | Тип | Автор | AutoSave | Описание |
---|---|---|---|---|
Файл адаптер (встроенный) | Файл | Casbin | ❌ | Для .CSV (запятые значения) файлов |
Фильтрованный файловый адаптер (встроенный) | File | Casbin | ❌ | Для .CSV (Значения, разделенные запятыми) файлов с поддержкой загрузки подмножеств политики |
Adapter LuaSQL | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite3 поддерживаются LuaSQL |
4Дни адаптер | 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. он соединяется с MySQL DB на 127.0.0.1:3306 с паролем 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. om/casbin-rs/diesel-adapter
// убедитесь, что вы активировали функцию `mysql`
используйте казино::prelude::*;
use 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") // перезаписываем имя хоста, конфигурацию порта
.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. om/php-casbin/dbal-adapter
use Casbin\Enforcer;
use CasbinAdapter\DBAL\Adapter as DatabaseAdapter;
$config = [
// Либо 'driver' с одним из следующих значений:
// pdo_mysql, do_sqlite,pdo_pgsql,pdo_oci (нестабильный),pdo_sqlsrv,pdo_sqlsrv,
// mysqli,sqlanywhere,sqlsrv,ibm_db2 (нестабильный), rizzle_pdo_mysql
'водитель' => 'pdo_mysql',
'host' => '127. .0.1',
'dbname' => 'test',
'user' => 'root',
'password' => '',
'port' => '3306',
];
$a = DatabaseAdapter::newAdapter($config);
$e = new Enforcer('examples/basic_model. в', $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.LoadPolicy()
Загрузка/сохранение при запуске
Вы также можете захотеть перезагрузить модель, перезагрузить политику или сохранить ее после инициализации:
// Перезагрузите модель из файла CONF.
e.LoadModel()
// Перезагрузка политики из файла/базы данных.
e.LoadPolicy()
// Сохраняем текущую политику (обычно после изменения с API Касбина) обратно в файл/базу данных.
e.SavePolicy()
AutoSave
Есть возможность Автосохранение
для адаптеров. Когда адаптер поддерживает Автосохранение
, это означает, что он может поддерживать добавление единого правила политики для хранения или удаление одного правила политики из хранилища. Это в отличие от SavePolicy()
, потому что последний удалит все правила политики хранения и сохранит все правила политики из Касбина в хранилище. Таким образом, он может пострадать от проблем с эффективностью, когда количество правил политики является большим.
Когда адаптер поддерживает Автосохранение
, вы можете переключить эту опцию через функцию Enforcer.EnableAutoSave()
. По умолчанию эта опция включена (если адаптер поддерживает ее).
- Функция
Автосохранение
является необязательной. Адаптер может выбрать для реализации его или нет. Автосохранение
работает только для правоохранителя Касбина, когда адаптер использует его.- Смотрите столбец
Автосохранение
в приведенном выше списке адаптеров, чтобы увидеть, поддерживается лиАвтосохранение
адаптером.
Вот пример использования Автосохранения
:
import (
"github.com/casbin/casbin"
"github.com/casbin/xorm-adapter"
_ "github.com/go-sql-driver/mysql"
)
// По умолчанию включена опция автосохранения для enforcer.
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)
// Потому что автосохранение отключено, изменение политики только влияет на политику в Casbin enforcer,
// это не влияет на политику хранения.
e.AddPolicy(...)
e.RemovePolicy(...)
// Включите опцию автосохранения.
e.EnableAutoSave(true)
// Потому что включено автосохранение, изменения политики не только влияют на политику в Касбине,
// но и влияют на политику в хранении.
e.AddPolicy(...)
e.RemovePolicy(...)
Для получения дополнительных примеров см. https://github.com/casbin/xorm-adapter/blob/master/adapter_test.go
Как написать адаптер
Все адаптеры должны реализовать интерфейс Adapter , предоставив как минимум два обязательных метода:модель загрузки(модель). odel) ошибка
и SavePolicy(модель модели)
.
Остальные три функции являются факультативными. Они должны быть реализованы, если адаптер поддерживает функцию Auto-Save
.
Метод | Тип | Описание |
---|---|---|
LoadPolicy() | mandatory | Загрузить все правила политики из хранилища |
Сохранение политики () | mandatory | Сохранить все правила политики в хранилище |
AddPolicy() | опционально | Добавить правило политики в хранилище |
Удалить политику() | optional | Удалить правило политики из хранилища |
УдалитьFilteredPolicy() | optional | Удалить правила политики, соответствующие фильтру |
Если адаптер не поддерживает Автосохранение
, он должен обеспечить пустую реализацию для трех опциональных функций. Вот пример для Голанга:
// AddPolicy добавляет в хранилище правило политики.
func (a *Adapter) AddPolicy(sec string, ptype string, rule []string) error {
return errors. ew("не реализован")
}
// RemovePolicy удаляет правило политики из хранилища.
func (a *Adapter) RemovePolicy(sec string, ptype string, rule []string) error {
return errors. ew("не реализован")
}
// RemoveFilteredPolicy удаляет правила, соответствующие фильтру из хранилища.
func (a *Adapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error {
return errors.New("not implemented")
}
Силор Касбин будет игнорировать , не реализованный
ошибка при вызове этих трех дополнительных функций.
Существует подробная информация о том, как написать адаптер.
- Структура данных. Адаптер должен поддерживать чтение минимум шесть столбцов.
- Имя базы данных. По умолчанию имя базы данных должно быть
casbin
. - Имя таблицы. По умолчанию имя таблицы должно быть
casbin_rule
. - Ptype столбец. Имя этого столбца должно быть
ptype
вместо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" ] ]
}
Кто несет ответственность за создание БД?
Как конвенция, адаптер должен быть способен автоматически создавать базу данных с именем casbin
, если она не существует и использовать ее для хранения политики. Пожалуйста, используйте Xorm адаптер в качестве справочной реализации: https://github.com/casbin/xorm-adapter