Adapters
ใน Casbin, การจัดเก็บนโยบายถูกดำเนินการในรูปแบบของอะแดปเตอร์ (หรือที่เรียกว่ามิดเดิลแวร์สำหรับ Casbin) ผู้ใช้ Casbin สามารถใช้อะแดปเตอร์ในการโหลดกฎนโยบายจากที่เก็บข้อมูล (หรือที่เรียกว่า LoadPolicy()
), หรือบันทึกกฎนโยบายลงไปในที่เก็บข้อมูล (หรือที่เรียกว่า SavePolicy()
) เพื่อให้มีน้ำหนักเบา, เราไม่ได้ใส่โค้ดอะแดปเตอร์ไว้ในไลบรารีหลัก
อะแดปเตอร์ที่รองรับ
รายการอะแดปเตอร์ของ Casbin ที่สมบูรณ์ได้ถูกให้ไว้ด้านล่างนี้ การมีส่วนร่วมจากบุคคลที่สามในการสร้างอะแดปเตอร์ใหม่นั้นได้รับการต้อนรับ, กรุณาแจ้งให้เราทราบและเราจะใส่มันไว้ในรายการนี้:
- Go
- Java
- Node.js
- PHP
- Python
- .NET
- Rust
- Ruby
- Swift
- Lua
Adapter | Type | Author | AutoSave | Description |
---|---|---|---|---|
File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files |
Filtered File Adapter (built-in) | File | @faceless-saint | ❌ | For .CSV (Comma-Separated Values) files with policy subset loading support |
SQL Adapter | SQL | @Blank-Xu | ✅ | MySQL, PostgreSQL, SQL Server, SQLite3 are supported in master branch and Oracle is supported in oracle branch by database/sql |
Xorm Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, TiDB, SQLite, SQL Server, Oracle are supported by Xorm |
GORM Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, Sqlite3, SQL Server are supported by GORM |
GORM Adapter Ex | ORM | Casbin | ✅ | MySQL, PostgreSQL, Sqlite3, SQL Server are supported by GORM |
Ent Adapter | ORM | Casbin | ✅ | MySQL, MariaDB, PostgreSQL, SQLite, Gremlin-based graph databases are supported by ent ORM |
Beego ORM Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, Sqlite3 are supported by Beego ORM |
SQLX Adapter | ORM | @memwey | ✅ | MySQL, PostgreSQL, SQLite, Oracle are supported by SQLX |
Sqlx Adapter | ORM | @Blank-Xu | ✅ | MySQL, PostgreSQL, SQL Server, SQLite3 are supported in master branch and Oracle is supported in oracle branch by sqlx |
GF ORM Adapter | ORM | @vance-liu | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM |
GoFrame ORM Adapter | ORM | @kotlin2018 | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM |
gf-adapter | ORM | @zcyc | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM |
Gdb Adapter | ORM | @jxo-me | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM |
GoFrame V2 Adapter | ORM | @hailaz | ✅ | MySQL, SQLite, PostgreSQL, Oracle, SQL Server are supported by GoFrame ORM |
Bun Adapter | ORM | @JunNishimura | ✅ | MySQL, SQLite, PostgreSQL, SQL Server are supported by Bun ORM |
Filtered PostgreSQL Adapter | SQL | Casbin | ✅ | For PostgreSQL |
Filtered pgx Adapter | SQL | @pckhoi | ✅ | PostgreSQL is supported by pgx |
PostgreSQL Adapter | SQL | @cychiuae | ✅ | For PostgreSQL |
RQLite Adapter | SQL | EDOMO Systems | ✅ | For RQLite |
MongoDB Adapter | NoSQL | Casbin | ✅ | For MongoDB based on MongoDB Go Driver |
RethinkDB Adapter | NoSQL | @adityapandey9 | ✅ | For RethinkDB |
Cassandra Adapter | NoSQL | Casbin | ❌ | For Apache Cassandra DB |
DynamoDB Adapter | NoSQL | HOOQ | ❌ | For Amazon DynamoDB |
Dynacasbin | NoSQL | NewbMiao | ✅ | For Amazon DynamoDB |
ArangoDB Adapter | NoSQL | @adamwasila | ✅ | For ArangoDB |
Amazon S3 Adapter | Cloud | Soluto | ❌ | For Minio and Amazon S3 |
Go CDK Adapter | Cloud | @bartventer | ✅ | Adapter based on Go Cloud Dev Kit that supports: Amazon DynamoDB, Azure CosmosDB, GCP Firestore, MongoDB, In-Memory |
Azure Cosmos DB Adapter | Cloud | @spacycoder | ✅ | For Microsoft Azure Cosmos DB |
GCP Firestore Adapter | Cloud | @reedom | ❌ | For Google Cloud Platform Firestore |
GCP Cloud Storage Adapter | Cloud | qurami | ❌ | For Google Cloud Platform Cloud Storage |
GCP Cloud Spanner Adapter | Cloud | @flowerinthenight | ✅ | For Google Cloud Platform Cloud Spanner |
Consul Adapter | KV store | @ankitm123 | ❌ | For HashiCorp Consul |
Redis Adapter (Redigo) | KV store | Casbin | ✅ | For Redis |
Redis Adapter (go-redis) | KV store | @mlsen | ✅ | For Redis |
Etcd Adapter | KV store | @sebastianliu | ❌ | For etcd |
BoltDB Adapter | KV store | @speza | ✅ | For Bolt |
Bolt Adapter | KV store | @wirepair | ❌ | For Bolt |
BadgerDB Adapter | KV store | @inits | ✅ | For BadgerDB |
Protobuf Adapter | Stream | Casbin | ❌ | For Google Protocol Buffers |
JSON Adapter | String | Casbin | ❌ | For JSON |
String Adapter | String | @qiangmzsx | ❌ | For String |
HTTP File Adapter | HTTP | @h4ckedneko | ❌ | For http.FileSystem |
FileSystem Adapter | File | @naucon | ❌ | For fs.FS and embed.FS |
Adapter | Type | Author | AutoSave | Description |
---|---|---|---|---|
File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files |
JDBC Adapter | JDBC | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server are supported by JDBC |
Hibernate Adapter | ORM | Casbin | ✅ | Oracle, DB2, SQL Server, Sybase, MySQL, PostgreSQL are supported by Hibernate |
MyBatis Adapter | ORM | Casbin | ✅ | MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server (the same as JDBC) are supported by MyBatis 3 |
Hutool Adapter | ORM | @mapleafgo | ✅ | MySQL, Oracle, PostgreSQL, SQLite are supported by Hutool |
MongoDB Adapter | NoSQL | Casbin | ✅ | MongoDB is supported by mongodb-driver-sync |
DynamoDB Adapter | NoSQL | Casbin | ❌ | For Amazon DynamoDB |
Redis Adapter | KV store | Casbin | ✅ | For Redis |
Adapter | Type | Author | AutoSave | Description |
---|---|---|---|---|
File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files |
Filtered File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files with policy subset loading support |
String Adapter (built-in) | String | @calebfaruki | ❌ | For String |
Basic Adapter | Native ORM | Casbin | ✅ | pg, mysql, mysql2, sqlite3, oracledb, mssql are supported by the adapter itself |
Sequelize Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by Sequelize |
TypeORM Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL, MongoDB are supported by TypeORM |
Prisma Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, AWS Aurora, Azure SQL are supported by Prisma |
Knex Adapter | ORM | knex | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracle are supported by Knex.js |
Objection.js Adapter | ORM | @willsoto | ✅ | MSSQL, MySQL, PostgreSQL, SQLite3, Oracle are supported by Objection.js |
MikroORM Adapter | ORM | @baisheng | ✅ | MongoDB, MySQL, MariaDB, PostgreSQL, SQLite are supported by MikroORM |
Node PostgreSQL Native Adapter | SQL | @touchifyapp | ✅ | PostgreSQL adapter with advanced policy subset loading support and improved performances built with node-postgres. |
Mongoose Adapter | NoSQL | elastic.io and Casbin | ✅ | MongoDB is supported by Mongoose |
Mongoose Adapter (No-Transaction) | NoSQL | minhducck | ✅ | MongoDB is supported by Mongoose |
Node MongoDB Native Adapter | NoSQL | NathanBhanji | ✅ | For Node MongoDB Native |
Node MongoDB Native Adapter | NoSQL | @juicycleff | ✅ | For Node MongoDB Native |
DynamoDB Adapter | NoSQL | @fospitia | ✅ | For Amazon DynamoDB |
Couchbase Adapter | NoSQL | @MarkMYoung | ✅ | For Couchbase |
Redis Adapter | KV store | Casbin | ❌ | For Redis |
Redis Adapter | KV store | @NandaKishorJeripothula | ❌ | For Redis |
Adapter | Type | Author | AutoSave | Description |
---|---|---|---|---|
File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files |
Database Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server are supported by techone/database |
Zend Db Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite, Oracle, IBM DB2, Microsoft SQL Server, Other PDO Driver are supported by zend-db |
Doctrine DBAL Adapter (Recommend) | ORM | Casbin | ✅ | Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management. |
Medoo Adapter | 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 Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, Oracle, IBM DB2, Microsoft SQL Server, PDO, etc. are supported by laminas-db |
Zend-db Adapter | 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 Adapter | KV store | @nsnake | ❌ | For Redis |
Adapter | Type | Author | AutoSave | Description |
---|---|---|---|---|
File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files |
Django ORM Adapter | ORM | Casbin | ✅ | PostgreSQL, MariaDB, MySQL, Oracle, SQLite, IBM DB2, Microsoft SQL Server, Firebird, ODBC are supported by Django ORM |
SQLObject Adapter | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Microsoft SQL Server, Firebird, Sybase, MAX DB, pyfirebirdsql are supported by SQLObject |
SQLAlchemy Adapter | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by SQLAlchemy |
Async SQLAlchemy Adapter | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by SQLAlchemy |
Async Databases Adapter | ORM | Casbin | ✅ | PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by Databases |
Peewee Adapter | ORM | @shblhy | ✅ | PostgreSQL, MySQL, SQLite are supported by Peewee |
MongoEngine Adapter | ORM | @zhangbailong945 | ❌ | MongoDB is supported by MongoEngine |
Pony ORM Adapter | ORM | @drorvinkler | ✅ | MySQL, PostgreSQL, SQLite, Oracle, CockroachDB are supported by Pony ORM |
Tortoise ORM Adapter | ORM | @thearchitector | ✅ | PostgreSQL (>=9.4), MySQL, MariaDB, and SQLite are supported by 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 Adapter | NoSQL | ScienceLogic | ✅ (without remove_filtered_policy() ) | For Couchbase |
DynamoDB Adapter | NoSQL | @abqadeer | ✅ | For DynamoDB |
Pymongo Adapter | NoSQL | Casbin | ❌ | MongoDB is supported by Pymongo |
Redis Adapter | KV store | Casbin | ✅ | For Redis |
GCP Firebase Adapter | Cloud | @devrushi41 | ✅ | For Google Cloud Platform Firebase |
Adapter | Type | Author | AutoSave | Description |
---|---|---|---|---|
File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files |
EF Adapter | ORM | Casbin | ❌ | MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. are supported by Entity Framework 6 |
EFCore Adapter | ORM | Casbin | ✅ | 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 |
Adapter | Type | Author | AutoSave | Description |
---|---|---|---|---|
File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files |
Diesel Adapter | ORM | Casbin | ✅ | SQLite, PostgreSQL, MySQL are supported by Diesel |
Sqlx Adapter | ORM | Casbin | ✅ | PostgreSQL, MySQL are supported by Sqlx with fully asynchronous operation |
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 Adapter | String | Casbin | ✅ | For JSON |
YAML Adapter | String | Casbin | ✅ | For YAML |
Adapter | Type | Author | AutoSave | Description |
---|---|---|---|---|
File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files |
Sequel Adapter | ORM | CasbinRuby | ✅ | ADO, Amalgalite, IBM_DB, JDBC, MySQL, Mysql2, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite3, and TinyTDS are supported by Sequel |
Adapter | Type | Author | AutoSave | Description |
---|---|---|---|---|
File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files |
Memory Adapter (built-in) | Memory | Casbin | ❌ | For memory |
Fluent Adapter | ORM | Casbin | ✅ | PostgreSQL, SQLite, MySQL, MongoDB are supported by Fluent |
Adapter | Type | Author | AutoSave | Description |
---|---|---|---|---|
File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files |
Filtered File Adapter (built-in) | File | Casbin | ❌ | For .CSV (Comma-Separated Values) files with policy subset loading support |
LuaSQL Adapter | ORM | Casbin | ✅ | MySQL, PostgreSQL, SQLite3 are supported by LuaSQL |
4DaysORM Adapter | ORM | Casbin | ✅ | MySQL, SQLite3 are supported by 4DaysORM |
OpenResty Adapter | ORM | @tom2nonames | ✅ | MySQL, PostgreSQL are supported by it |
- หาก
casbin.NewEnforcer()
ถูกเรียกใช้กับอะแดปเตอร์ที่ชัดเจนหรือไม่ชัดเจน, นโยบายจะถูกโหลดขึ้นมาโดยอัตโนมัติ - คุณสามารถเรียก
e.LoadPolicy()
เพื่อโหลดกฎนโยบายจากที่เก็บข้อมูลใหม่ - หากอะแดปเตอร์ไม่รองรับคุณสมบัติ
Auto-Save
, กฎนโยบายจะไม่สามารถถูกบันทึกกลับไปยังที่เก็บข้อมูลได้โดยอัตโนมัติเมื่อคุณเพิ่มหรือลบนโยบาย คุณต้องเรียกSavePolicy()
ด้วยตัวเองเพื่อบันทึกกฎนโยบายทั้งหมด
ตัวอย่าง
ที่นี่เรามีตัวอย่างหลายอย่าง:
อะแดปเตอร์ไฟล์ (ในตัว)
ด้านล่างนี้แสดงวิธีการเริ่มต้นใช้งาน enforcer จากอะแดปเตอร์ไฟล์ในตัว:
- 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
ด้านล่างนี้แสดงวิธีการเริ่มต้นใช้งาน enforcer จากฐานข้อมูล MySQL มันเชื่อมต่อกับฐานข้อมูล MySQL ที่ 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.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
, คุณสามารถทำได้ดังนี้:
1.โหลดนโยบายจาก A ไปยังหน่วยความจำ
e, _ := NewEnforcer(m, A)
หรือ
e.SetAdapter(A)
e.LoadPolicy()
2.แปลงอะแดปเตอร์ของคุณจาก A ไปเป็น B
e.SetAdapter(B)
3.บันทึกนโยบายจากหน่วยความจำไปยัง B
e.SavePolicy()
โหลด/บันทึกในระหว่างการทำงาน
คุณอาจต้องการโหลดโมเดลใหม่, โหลดนโยบายใหม่หรือบันทึกนโยบายหลังจากการเริ่มต้นใช้งาน:
// Reload the model from the model CONF file.
e.LoadModel()
// Reload the policy from file/database.
e.LoadPolicy()
// Save the current policy (usually after changed with Casbin API) back to file/database.
e.SavePolicy()
AutoSave
มีคุณสมบัติที่เรียกว่า Auto-Save
สำหรับอะแดปเตอร์ เมื่ออะแดปเตอร์รองรับ Auto-Save
, หมายความว่ามันสามารถรองรับการเพิ่มกฎนโยบายเดี่ยวไปยังที่เก็บข้อมูล, หรือการลบกฎนโยบายเดี่ยวออกจากที่เก็บข้อมูล นี่ไม่เหมือนกับ SavePolicy()
, เพราะว่าคำสั่งหลังจะลบกฎนโยบายทั้งหมดในที่เก็บข้อมูลและบันทึกกฎนโยบายทั้งหมดจาก Casbin enforcer ไปยังที่เก็บข้อมูล ดังนั้นอาจเกิดปัญหาด้านประสิทธิภาพเมื่อจำนวนกฎนโยบายมีมาก
เมื่ออะแดปเตอร์รองรับ Auto-Save
, คุณสามารถเปลี่ยนตัวเลือกนี้ผ่านฟังก์ชัน Enforcer.EnableAutoSave()
ตัวเลือกนี้ถูกเปิดใช้งานโดยค่าเริ่มต้น (หากอะแดปเตอร์รองรับ)
- คุณสมบัติ
Auto-Save
เป็นตัวเลือก อะแดปเตอร์สามารถเลือกที่จะดำเนินการหรือไม่ Auto-Save
จะทำงานได้เฉพาะเมื่อ Casbin enforcer ใช้อะแดปเตอร์ที่รองรับมัน- ดูคอลัมน์
AutoSave
ในรายการอะแดปเตอร์ด้านบนเพื่อดูว่าAuto-Save
ได้รับการรองรับโดยอะแดปเตอร์หรือไม่
นี่คือตัวอย่างเกี่ยวกับวิธีการใช้ Auto-Save
:
import (
"github.com/casbin/casbin"
"github.com/casbin/xorm-adapter"
_ "github.com/go-sql-driver/mysql"
)
// By default, the AutoSave option is enabled for an enforcer.
a := xormadapter.NewAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0.1:3306)/")
e := casbin.NewEnforcer("examples/basic_model.conf", a)
// Disable the AutoSave option.
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(...)
สำหรับตัวอย่างเพิ่มเติม, กรุณาดูที่: https://github.com/casbin/xorm-adapter/blob/master/adapter_test.go
วิธีการเขียนอะแดปเตอร์
อะแดปเตอร์ทั้งหมดควรที่จะดำเนินการตามอินเตอร์เฟซ Adapter โดยการให้วิธีการที่จำเป็นอย่างน้อยสองวิธี: LoadPolicy(model model.Model) error
และ SavePolicy(model model.Model) error
อีกสามฟังก์ชันเป็นตัวเลือก พวกเขาควรจะถูกดำเนินการหากอะแดปเตอร์รองรับคุณสมบัติ Auto-Save
วิธีการ | ประเภท | คำอธิบาย |
---|---|---|
LoadPolicy() | บังคับ | โหลดกฎนโยบายทั้งหมดจากที่เก็บข้อมูล |
SavePolicy() | บังคับ | บันทึกกฎนโยบายทั้งหมดไปยังที่เก็บข้อมูล |
AddPolicy() | ไม่บังคับ | เพิ่มกฎนโยบายไปยังที่เก็บข้อมูล |
RemovePolicy() | ไม่บังคับ | ลบกฎนโยบายออกจากที่เก็บข้อมูล |
RemoveFilteredPolicy() | ไม่บังคับ | ลบกฎนโยบายที่ตรงกับตัวกรองออกจากที่เก็บข้อมูล |
หากอะแดปเตอร์ไม่รองรับ 'Auto-Save' ควรจะให้การดำเนินการที่ว่างเปล่าสำหรับฟังก์ชันที่ไม่บังคับทั้งสาม นี่คือตัวอย่างสำหรับ Golang:
// AddPolicy adds a policy rule to the storage.
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 enforcer จะไม่สนใจข้อผิดพลาด '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' ต้องการ 'filter' เป็นพารามิเตอร์ ตัวกรองควรเป็นอย่างนี้
{
"p":[ [ "alice" ], [ "bob" ] ],
"g":[ [ "", "book_group" ], [ "", "pen_group" ] ],
"g2":[ [ "alice" ] ]
}
ใครที่รับผิดชอบในการสร้างฐานข้อมูล?
ตามข้อตกลง, อะแดปเตอร์ควรสามารถสร้างฐานข้อมูลชื่อ 'casbin' โดยอัตโนมัติหากยังไม่มีและใช้มันสำหรับการเก็บนโยบาย กรุณาใช้อะแดปเตอร์ Xorm เป็นตัวอย่างการดำเนินการ: https://github.com/casbin/xorm-adapter
Context Adapter
ContextAdapter ให้ส่วนต่อประสานที่ตระหนักถึงบริบทสำหรับอะแดปเตอร์ Casbin
ผ่านบริบท, คุณสามารถดำเนินการคุณสมบัติเช่นการควบคุมเวลาหมดอายุสำหรับ API อะแดปเตอร์
ตัวอย่าง
gormadapter รองรับอะแดปเตอร์ที่มีบริบท, ต่อไปนี้เป็นการควบคุมเวลาหมดอายุที่ดำเนินการโดยใช้บริบท
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)
}
วิธีการเขียนอะแดปเตอร์บริบท
API 'ContextAdapter' มีเพียงชั้นการประมวลผลบริบทเพิ่มเติมเท่านั้นเมื่อเทียบกับ API 'Adapter' ปกติ, และบนพื้นฐานของการดำเนินการ API Adapter ปกติ, คุณสามารถห่อหุ้มตรรกะการประมวลผลของคุณเองสำหรับบริบท
A simple reference to the gormadapter
: adapter.go