Casbin

Casbin

  • ドキュメント
  • API
  • エディター
  • IDE プラグイン
  • Single Sign-On (SSO)
  • フォーラム
  • ヘルプ
  • ブログ
  • Pricing
  • Contact Sales
  • Languages icon日本語
    • English
    • 中文
    • 한국어
    • Русский
    • Français
    • Deutsch
    • 翻訳に協力する
  • GitHub

›拡張

基本

  • 概要
  • はじめよう
  • 仕組み
  • チュートリアル

モデル

  • サポートされるモデル
  • モデルの構文
  • エフェクト
  • 関数
  • RBAC
  • RBAC with Pattern
  • ドメイン付きRBAC
  • Casbin RBAC v.s. RBAC96
  • ABAC
  • 優先モデル
  • スーパー管理者

ストレージ

  • モデル ストレージ
  • ポリシーストレージ
  • ポリシーサブセットの読み込み

拡張

  • Enforcers
  • アダプター
  • Watchers
  • 派遣者
  • ロールマネージャー
  • ミドルウェア
  • GraphQL Middlewares
  • Cloud Native Middlewares

API

  • API の概要
  • 管理API
  • RBAC API
  • Domains API による RBAC
  • RoleManager API
  • データ権限

高度な使い方

  • マルチスレッド
  • Benchmarks
  • パフォーマンス最適化
  • Kubernetes の承認
  • Envoyによるサービスメッシュの承認

管理

  • 管理者ポータル
  • カスビンサービス
  • ログとエラー処理
  • フロントエンドの使用法

エディター

  • オンラインエディター
  • IDE プラグイン

もっと見る

  • Adopters
  • コントリビューション
  • プライバシーポリシー
  • 利用規約
Translate

アダプター

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
アダプタータイプ作成者AutoSave説明
ファイルアダプター(内蔵)ファイルCasbin❌.CSV (カンマ区切り値) ファイル用
フィルタされたファイルアダプタ(内蔵)ファイル@faceless-saint❌ポリシーサブセット読み込みサポートを持つ .CSV (カンマ区切り値) ファイルの場合
SQL アダプターSQL@Blank-Xu✅MySQL, PostgreSQL, SQL Server, SQLite3 は master ブランチでサポートされており、Oracle は oracle ブランチで database/sql でサポートされています。
XormアダプターORMCasbin✅MySQL、PostgreSQL、TiDB、SQLite、SQL Server、Oracle は Xorm でサポートされています
GormアダプターORMCasbin✅MySQL, PostgreSQL, Sqlite3, SQL Server は Gorm でサポートされています
アダプターを接続ORMCasbin✅MySQL, MariaDB, PostgreSQL, SQLite, Gremlinベースのグラフデータベースは ent ORM でサポートされています
Beego ORMアダプターORMCasbin✅MySQL, PostgreSQL, Sqlite3は Beego ORMでサポートされています
SQLX アダプターORM@memwey✅MySQL, PostgreSQL, SQLite, Oracle は SQLX でサポートされています
Sqlx アダプターSQL@Blank-Xu✅MySQL, PostgreSQL, SQL Server, SQLite3 は master ブランチでサポートされており、Oracle は oracle ブランチで sqlx でサポートされています。
GFORMアダプターORM@vance-liu✅MySQL, SQLite, PostgreSQL, Oracle, SQL Server は GoFrame ORM でサポートされています
GoFrame ORMアダプターORM@kotlin2018✅MySQL, SQLite, PostgreSQL, Oracle, SQL Server は GoFrame ORM でサポートされています
フィルタされたPostgreSQLアダプターSQLCasbin✅PostgreSQL 用
フィルタされた pgx アダプターSQL@pckhoi✅PostgreSQL は pgx でサポートされています
PostgreSQL アダプターSQL@cychiuae✅PostgreSQL 用
RQLite アダプターSQLEDOMO システム✅RQLite 用
MongoDB AdapterNoSQLCasbin✅MongoDB Go Driver に基づく MongoDB 用
RethinkDB アダプターNoSQL@adityapandey9✅RethinkDB 用
Cassandra アダプターNoSQLCasbin❌Apache Cassandra DB 用
DynamoDBアダプターNoSQLHOOQ❌Amazon DynamoDB 用
DynacasbinNoSQLNewbMiao✅Amazon DynamoDB 用
ArangoDB アダプターNoSQL@adamwasila✅ArangoDB 用
Amazon S3 アダプタークラウドSoluto❌Minio と Amazon S3 用
Azure Cosmos DB アダプタークラウド@spacycoder✅Microsoft Azure Cosmos DB 用
GCP Firestore Adapterクラウド@reedom❌Google Cloud Platform Firestore
GCP クラウドストレージアダプタークラウドqurami❌Google Cloud Platform Cloud Storage
GCP クラウドスパナアダプタークラウド@flowerinthenight✅Google Cloud Platform Spanner
領事アダプターKV ストア@ankitm123❌HashiCorp Consul
Redisアダプター (Redigo)KV ストアCasbin✅Redis 用
Redisアダプター (go-redis)KV ストア@mlsen✅Redis 用
Etcd アダプターKV ストア@sebastianliu❌etcd 用
BoltDB アダプターKV ストア@speza✅ボルト用
ボルトアダプターKV ストア@wirep❌ボルト用
BadgerDB アダプターKV ストア@inits✅BadgerDB 用
Protobuf アダプターストリームCasbin❌Googleプロトコルバッファー 用
JSONアダプター文字列Casbin❌JSON 用
ストリングアダプター文字列@qiangmzsx❌For String
HTTP ファイルアダプターHTTP@h4ckedneko❌http.FileSystem 用
FileSystem アダプターファイル@naucon❌fs.FS と embed.FS の場合
アダプタータイプ作成者AutoSave説明
ファイルアダプター(内蔵)ファイルCasbin❌.CSV (カンマ区切り値) ファイル用
JDBC アダプターJDBCCasbin✅MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server は JDBC によってサポートされています
HibernateアダプターORMCasbin✅Oracle, DB2, SQL Server, Sybase, MySQL, PostgreSQLは Hibernate でサポートされています
MyBatisアダプターORMCasbin✅MySQL, Oracle, PostgreSQL, DB2, Sybase, SQL Server (JDBCと同じ) は MyBatis 3 でサポートされています
ヒューツールアダプターORM@mapleafgo✅MySQL, Oracle, PostgreSQL, SQLite は Hutool でサポートされています
MongoDB AdapterNoSQLCasbin✅MongoDB は mongodb-driver-sync でサポートされています
DynamoDBアダプターNoSQLCasbin❌Amazon DynamoDB 用
RedisアダプターKV ストアCasbin✅Redis 用
アダプタータイプ作成者AutoSave説明
ファイルアダプター(内蔵)ファイルCasbin❌.CSV (カンマ区切り値) ファイル用
フィルタされたファイルアダプタ(内蔵)ファイルCasbin❌ポリシーサブセット読み込みサポートを持つ .CSV (カンマ区切り値) ファイルの場合
ストリングアダプター(内蔵)文字列@calebfaruki❌For String
基本アダプターネイティブ ORMCasbin✅pg、mysql、mysql2、sqlite3、oracledb、mssqlはアダプタ自体でサポートされています
シーケンスアダプターORMCasbin✅MySQL, PostgreSQL, SQLite, Microsoft SQL Server は Sequelize でサポートされています
TypeORMアダプターORMCasbin✅MySQL、PostgreSQL、MariaDB、SQLite、MS SQL Server、Oracle、WebSQL、MongoDBは TypeORM でサポートされています
プリズマアダプターORMCasbin✅MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, AWS Aurora, Azure SQL は Prisma でサポートされています
Knex アダプターORM@sarneeh と 膝✅MSSQL, MySQL, PostgreSQL, SQLite3, Oracleは Knex.js でサポートされています
Objection.js アダプターORM@willsoto✅MSSQL, MySQL, PostgreSQL, SQLite3, Oracleは Objection.js でサポートされています
ノードPostgreSQLネイティブアダプターSQL@touchifyapp✅高度なポリシーサブセット読み込みサポートと ノード-postgresで構築されたパフォーマンスの向上を備えたPostgreSQLアダプタ。
Mongoose アダプターNoSQLelastic.io と Casbin✅MongoDB は Mongoose でサポートされています
Mongoose Adapter (No-Transaction)NoSQLminhducck✅MongoDB は Mongoose でサポートされています
ノードMongoDB ネイティブアダプターNoSQL@juicycleff✅Node MongoDB Native
DynamoDBアダプターNoSQL@fospitia✅Amazon DynamoDB 用
Couchbase アダプターNoSQL@MarkMYoung✅Couchbase 用
RedisアダプターKV ストアCasbin❌Redis 用
RedisアダプターKV ストア@NandaKishorJeripothula❌Redis 用
アダプタータイプ作成者AutoSave説明
ファイルアダプター(内蔵)ファイルCasbin❌.CSV (カンマ区切り値) ファイル用
データベースアダプターORMCasbin✅MySQL, PostgreSQL, SQLite, Microsoft SQL Server は techone/database でサポートされています
Zend Db アダプターORMCasbin✅MySQL, PostgreSQL, SQLite, Oracle, IBM DB2, Microsoft SQL Server, その他のPDOドライバは zend-db でサポートされています
Doctrine DBAL アダプタ(推奨)ORMCasbin✅データベーススキーマのイントロスペクションと管理のための多くの機能を備えた強力なPHPデータベース抽象レイヤー(DBAL) 。
メドゥーアダプターORMCasbin✅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 アダプターORMCasbin✅MySQL、PostgreSQL、Oracle、IBM DB2、Microsoft Sql Server、PDOなど laminas-db でサポートされています
Zend-db アダプターORMCasbin✅MySQL、PostgreSQL、Oracle、IBM DB2、Microsoft Sql Server、PDOなど は zend-db でサポートされています
RedisアダプターKV ストア@nsnake❌Redis 用
アダプタータイプ作成者AutoSave説明
ファイルアダプター(内蔵)ファイルCasbin❌.CSV (カンマ区切り値) ファイル用
SQLAlchemy アダプターORMCasbin✅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 でサポートされています
ポニーORMアダプターORM@drorvinkler✅MySQL、PostgreSQL、SQLite、Oracle、CockroachDBは ポニーORMでサポートされています
カメORMアダプターORM@thearchitector✅PostgreSQL(>=9.4)、MySQL、MariaDB、およびSQLiteは Tortoise ORM でサポートされています
Couchbase アダプターNoSQLScienceLogic✅ ( remove_filtered_policy() なし)Couchbase 用
DynamoDBアダプターNoSQL@abqadeer✅DynamoDB 用
PymongoアダプターNoSQLCasbin❌MongoDB は Pymongo でサポートされています
GCP Firebase アダプタークラウド@devrushi41✅Google Cloud Platform Firebase
Async ormar AdapterORMsampingantech✅PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server, Firebird, Sybase are supported by ormar
アダプタータイプ作成者AutoSave説明
ファイルアダプター(内蔵)ファイルCasbin❌.CSV (カンマ区切り値) ファイル用
EFアダプターORMCasbin❌MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. は Entity Framework 6 でサポートされています
EFCore アダプターORMCasbin✅MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. は Entity Framework Core でサポートされています
EFCore アダプター (.NET Core 5)ORM@g4dvali✅MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle, DB2, etc. は Entity Framework Core でサポートされています
アダプタータイプ作成者AutoSave説明
ファイルアダプター(内蔵)ファイルCasbin❌.CSV (カンマ区切り値) ファイル用
ディーゼルアダプターORMCasbin✅SQLite, PostgreSQL, MySQL は ディーゼル でサポートされています
Sqlx アダプターORMCasbin✅PostgreSQL, MySQL は Sqlx によってサポートされており、完全非同期操作が可能です。
SeaORMアダプターORMlingdu1234✅PostgreSQL, MySQL は SeaORM によってサポートされており、完全に非同期で動作します
JSONアダプター文字列Casbin✅JSON 用
YAML アダプター文字列Casbin✅YAML 用
アダプタータイプ作成者AutoSave説明
ファイルアダプター(内蔵)ファイルCasbin❌.CSV (カンマ区切り値) ファイル用
連続アダプターORMCasbinRuby✅ADO, Amagalite, IBM_DB, JDBC, MySQL, MySQL2, ODBC, Oracle, PostgreSQL, SQLAnywhere, SQLite3, および TinyTDS がサポートしています シーケンス
アダプタータイプ作成者AutoSave説明
ファイルアダプター(内蔵)ファイルCasbin❌.CSV (カンマ区切り値) ファイル用
メモリー・アダプター(内蔵)メモリCasbin❌メモリ用
Fluent アダプターORMCasbin✅PostgreSQL, SQLite, MySQL, MongoDB は Fluent でサポートされています
アダプタータイプ作成者AutoSave説明
ファイルアダプター(内蔵)ファイルCasbin❌.CSV (カンマ区切り値) ファイル用
フィルタされたファイルアダプタ(内蔵)ファイルCasbin❌ポリシーサブセット読み込みサポートを持つ .CSV (カンマ区切り値) ファイルの場合
LuaSQLアダプターORMCasbin✅MySQL, PostgreSQL, SQLite3 は LuaSQL でサポートされています
4DaysORMアダプターORMCasbin✅MySQL, SQLite3は 4DaysORMでサポートされています
note
  1. casbin.NewEnforcer() が明示的または暗黙的なアダプタで呼び出された場合、ポリシーは自動的に読み込まれます。
  2. e.LoadPolicy() を呼び出して、ポリシーのルールをストレージから再読み込みできます。
  3. アダプターが 自動保存 機能をサポートしていない場合。 ポリシーを追加または削除すると、ポリシールールはストレージに自動的に保存されません。 すべてのポリシールールを保存するには、 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/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.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()
  1. アダプターを A から B に変換します。

    e.SetAdapter(B)
    
  2. Save policy from memory to B

    e.LoadPolicy()
    

Load/Save at run-time

You may also want to reload the model, reload the policy or save the policy after initialization:

// Reload the model from the model CONF file.
e.LoadModel()

// ファイル/データベースからポリシーを再読み込みします。
e.LoadPolicy()

// 現在のポリシー(通常はCasbin APIで変更後)をファイル/データベースに保存します。
e.SavePolicy()

AutoSave

アダプターには 自動保存 という機能があります。 アダプターが 自動保存をサポートしている場合 ストレージに単一のポリシールールを追加したり、ストレージから単一のポリシールールを削除したりすることができます。 これは SavePolicy()とは違います 後者は、ストレージ内のすべてのポリシールールを削除し、Casbinエンフォーサーからストレージにすべてのポリシールールを保存するためです。 したがって、ポリシールールの数が多い場合、パフォーマンスの問題が発生する可能性があります。

アダプターが Auto-Saveをサポートしている場合、 Enforcer.EnableAutoSave() 関数を使用してこのオプションを切り替えることができます。 このオプションはデフォルトで有効になっています(アダプターがサポートしている場合)。

note
  1. 自動保存 機能は任意です。 アダプターは実装するかどうかを選択できます。
  2. 自動保存 は、エンフォーサーが使用するアダプターがサポートしている場合にのみ動作します。
  3. 自動保存 がアダプターによってサポートされているかどうかについては、上のアダプターリストの 自動保存 列を参照してください。

自動保存 の使い方の例を以下に示します。

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(...)

詳細については、以下を参照してください: 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()省略可能ストレージにポリシールールを追加
削除ポリシー()省略可能ストレージからポリシールールを削除
RemoveFilterPolicy()省略可能ストレージからフィルタに一致するポリシールールを削除
note

アダプターが 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 (*Adapter) RemoveFilteredPolicy(sec文字列, ptype文字列, 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 パラメータとして フィルター が必要です。 フィルタは次のようなものでなければなりません。 json { "p":[ "alice" ], [ "bob" ] , "g":[ [ "", "book_group" ], [ "", "pen_group" ] ], "g2":[ [ "alice" ] ] }

誰がDBを作成する責任がありますか?

慣例として、 アダプターが存在しない場合は、自動的に カビン という名前のデータベースを作成し、ポリシーストレージに使用する必要があります。 参照実装として Xorm アダプターを使用してください: https://github.com/casbin/xorm-adapter

← EnforcersWatchers →
  • サポートされているアダプター
  • 例
    • ファイルアダプター(内蔵)
    • MySQL adapter
  • 独自のストレージアダプターを使用する
  • 異なるアダプター間で移行/変換
  • Load/Save at run-time
  • AutoSave
    • アダプターの書き込み方法
    • 誰がDBを作成する責任がありますか?
Casbin
Docs
Getting StartedManagement APIRBAC APIMiddlewares
Community
Who's using Casbin?Stack Overflow
Casbin          jCasbin
Node-Casbin   PHP-CasbinPyCasbin          Casbin.NETCasbin-CPP        Casbin-RS
Follow @casbinHQ
Copyright © 2022 Casbin Organization