Адаптеры
В Касбине хранилища политики реализованы как адаптер (aka middleware for Casbin). Пользователь Casbin может использовать адаптер для загрузки правил политики хранения (aka LoadPolicy()), или сохранить правила политики к ней (aka SavePolicy()). Чтобы сохранить легкий вес, мы не ставим код адаптера в основную библиотеку.
Поддерживаемые адаптеры
Полный список адаптеров Casbin приводится ниже. Любой вклад сторонних разработчиков на новом адаптере приветствуется, пожалуйста, сообщите нам, и мы поместим его в этот список:)
| Адаптер | Тип | Автор | 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 (запятые значения) файлов |
| Фильтрованный файловый адаптер (встроенный) | Файл | 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 |
| Родной адаптер узла PostgreSQL | SQL | @touchifyapp | ✅ | PostgreSQL адаптер с поддержкой расширенной загрузки подмножества политик и улучшенной производительности, построенной на node-postgres. |
| Адаптер Монгозы | NoSQL | elastic.io и Касбин | ✅ | MongoDB поддерживается Mongoose |
| Адаптер Монгозы (Без транзакции) | NoSQL | minhducck | ✅ | MongoDB поддерживается Mongoose |
| Узел MongoDB Родной адаптер | NoSQL | @juicycleff | ✅ | Для родина узла MongoDB |
| Динамический адаптер | NoSQL | @fospitia | ✅ | Для Amazon DynamoDB |
| Адаптер базы купонов | NoSQL | @MarkMYoung | ✅ | Для Купона |
| Адаптер Redis | Магазин KV | Casbin | ❌ | Для Redis |
| Адаптер Redis | Магазин KV | @NandaKishorJeripothula | ❌ | Для 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 и др. поддерживаются ламинас-db |
| Адаптер Zend-db | ORM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft Sql Server, PDO и др. поддерживаются zend-db |
| Адаптер Redis | Магазин KV | @nsnake | ❌ | Для Redis |
| Адаптер | Тип | Автор | AutoSave | Описание |
|---|---|---|---|---|
| Файл адаптер (встроенный) | Файл | Casbin | ❌ | Для .CSV (запятые значения) файлов |
| Адаптер SQLAlchemy | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase поддерживаются 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 |
| Адаптер базы купонов | NoSQL | Логика | ✅ (без remove_filtered_policy()) | Для Купона |
| Динамический адаптер | NoSQL | @abqadeer | ✅ | Для DynamoDB |
| Адаптер Пимонго | NoSQL | Casbin | ❌ | MongoDB поддерживается Pymongo |
| GCP адаптер огненной базы | Облако | @devrushi41 | ✅ | Для Google Cloud Platform Firebase |
| Async ormar Adapter | ORM | sampingantech | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by ormar |
| Адаптер | Тип | Автор | AutoSave | Описание |
|---|---|---|---|---|
| Файл адаптер (встроенный) | Файл | Casbin | ❌ | Для .CSV (запятые значения) файлов |
| Адаптер EF | ORM | Casbin | ❌ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. поддерживаются Entity Framework 6 |
| EFCore адаптер | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. поддерживаются фреймворком сущности |
| EFCore Adapter (.NET Core 5) | ORM | @g4dvali | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. поддерживаются фреймворком сущности |
| Адаптер | Тип | Автор | AutoSave | Описание |
|---|---|---|---|---|
| Файл адаптер (встроенный) | Файл | Casbin | ❌ | Для .CSV (запятые значения) файлов |
| Адаптер дизеля | ORM | Casbin | ✅ | SQLite, PostgreSQL, MySQL поддерживается дизелем |
| Адаптер Sqlx | ORM | Casbin | ✅ | PostgreSQL, MySQL поддерживается Sqlx с полностью асинхронной операцией |
| Морской адаптер | ORM | lingdu1234 | ✅ | PostgreSQL, MySQL поддерживается SeaORM с полностью асинхронной операцией |
| JSON адаптер | Строка | Casbin | ✅ | Для JSON |
| Адаптер YAML | Строка | 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 (запятые значения) файлов |
| Фильтрованный файловый адаптер (встроенный) | Файл | Casbin | ❌ | Для .CSV (Значения, разделенные запятыми) файлов с поддержкой загрузки подмножеств политики |
| Adapter LuaSQL | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite3 поддерживаются LuaSQL |
| 4Дни адаптер | ORM | Casbin | ✅ | MySQL, SQLite3 поддерживается 4DaysORM |
::note
- Если
casbin.NewEnforcer()вызывается с явным или неявным адаптером, политика будет загружена автоматически. - Вы можете вызвать
e.LoadPolicy()для перезагрузки правил политики из хранилища. - Если адаптер не поддерживает функцию
Автосохранения, Правила политики не могут быть автоматически сохранены в хранилище, когда вы добавляете или удаляете политики. Вы должны вызватьSavePolicy()вручную, чтобы сохранить все правила. :::
Примеры
Здесь мы приводим несколько примеров:
Файловый адаптер (встроен)
Ниже показано, как инициализировать усилитель из встроенного файлового адаптера:
импортируйте "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?;
То же самое относится и к случаям:
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 и пустой паролем.
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.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. oadPolicy()
Загрузить/Сохранить при запуске
Вы также можете перезагрузить модель, перезагрузите политику или сохраните ее после инициализации:
// Перезагрузите модель из файла CONF.
e.LoadModel()
// Перезагрузка политики из файла/базы данных.
e.LoadPolicy()
// Сохраняем текущую политику (обычно после изменения с API Касбина) обратно в файл/базу данных.
e.SavePolicy()
AutoSave
Есть возможность Автосохранение для адаптеров. Когда адаптер поддерживает Автосохранение, это означает, что он может поддерживать добавление единого правила политики для хранения или удаление одного правила политики из хранилища. Это в отличие от SavePolicy(), потому что последний удалит все правила политики хранения и сохранит все правила политики из Касбина в хранилище. Таким образом, он может пострадать от проблем с эффективностью, когда количество правил политики является большим.
Когда адаптер поддерживает Автосохранение, вы можете переключить эту опцию через функцию Enforcer.EnableAutoSave(). По умолчанию эта опция включена (если адаптер поддерживает ее).
::note
- Функция
Автосохранениеявляется необязательной. Адаптер может выбрать для реализации его или нет. Автосохранениеработает только для правоохранителя Касбина, когда адаптер использует его.- Смотрите столбец
Автосохранениев приведенном выше списке адаптеров, чтобы увидеть, поддерживается лиАвтосохранениеадаптером. :::
Вот пример использования Автосохранения:
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() | опционально | Добавить правило политики в хранилище |
| Удалить политику() | опционально | Удалить правило политики из хранилища |
| УдалитьFilteredPolicy() | опционально | Удалить правила политики, соответствующие фильтру |
::note Если адаптер не поддерживает автосохранение, он должен обеспечить пустую реализацию для трех дополнительных функций. Вот пример для Голанга:
:::
// 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 (*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. Политика загрузкитребуетфильтрв качестве параметра. Фильтр должен быть чем-то подобным. json { "p":[ "alice" ], [ "bob" ] ], "g":[ "", "book_group" ], [ "", "pen_group" ] ], "g2":[ "alice" ]
Кто несет ответственность за создание БД?
Как конвенция, адаптер должен быть способен автоматически создавать базу данных с именем casbin , если она не существует и использовать ее для хранения политики. Пожалуйста, используйте Xorm адаптер в качестве справочной реализации: https://github.com/casbin/xorm-adapter