Адаптеры
В Касбине хранилища политики реализованы как адаптер (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