
ニュース: 正しいApache Casbinポリシーの書き方にまだ悩んでいますか? Apache Casbin online editor が登場しました! https://casbin.apache.org/editor/ でお試しください。

Apache Casbinは、Golangプロジェクト向けの、パワフルで効率的なオープンソースのアクセス制御ライブラリです。さまざまなアクセス制御モデルに基づく認可の强制执行をサポートします。
write-article、read-log のような権限を使用して、個別のリソースではなくリソースの種類を対象とするシナリオもあります。特定の記事やログへのアクセスを制御するものではありません。resource.Owner のようなシンタックスシュガーを使用して、リソースの属性を取得できます。/res/*、/res/:id のようなパスと、GET、POST、PUT、DELETE のようなHTTPメソッドをサポートします。Casbinでは、アクセス制御モデルは**PERMメタモデル(Policy、Effect、Request、Matchers)**に基づいてCONFファイルに抽象化されます。したがって、プロジェクトの認可メカニズムの切り替えやアップグレードは、設定を変更するだけの簡単な作業です。利用可能なモデルを組み合わせて、独自のアクセス制御モデルをカスタマイズできます。たとえば、RBACロールとABAC属性を1つのモデルにまとめ、1つのポリシールールセットを共有できます。
Casbinで最も基本的でシンプルなモデルはACLです。ACLのモデルCONFは次のとおりです:
# Request definition
[request_definition]
r = sub, obj, act
# Policy definition
[policy_definition]
p = sub, obj, act
# Policy effect
[policy_effect]
e = some(where (p.eft == allow))
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
ACLモデルのポリシーの例は次のとおりです:
p, alice, data1, read
p, bob, data2, write
つまり:
末尾に'\'を付けることでマルチラインモードもサポートしています:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
さらに、ABACを使用している場合は、Casbin golang版で次のように演算子 in を試せます(jCasbinとNode-Casbinはまだサポートされていません):
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
ただし、配列の長さが1より大きいことを確認する必要があります。そうしないとパニックが発生します。
その他の演算子については、govaluate を参照してください。
Apache Casbinが行うこと:
{subject, object, action} 形式またはユーザーが定義したカスタム形式でポリシーを强制执行します。許可と拒否の両方の認可をサポートします。root や administrator のような組み込みスーパーユーザーをサポートします。スーパーユーザーは明示的な権限なしにすべてを実行できます。keyMatch はリソースキー /foo/bar をパターン /foo* にマッピングできます。Apache Casbinが行わないこと:
username と password の検証)go get github.com/casbin/casbin/v3
https://casbin.apache.org/docs/overview
WebブラウザーでCasbinモデルとポリシーを作成するには、オンラインエディター(https://casbin.apache.org/editor/)も使用できます。プログラミング言語のIDEのように、``syntax highlightingやcode completion`` などの機能を提供します。
https://casbin.apache.org/docs/tutorials
モデルファイルとポリシーファイルを指定してCasbinエンフォーサーを新規作成します:
e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
注: ファイルの代わりにDB内のポリシーを使ってエンフォーサーを初期化することもできます。詳細はポリシーの永続化セクションを参照してください。
アクセスが発生する直前に、コードに認可フックを追加します:
sub := "alice" // the user that wants to access a resource.
obj := "data1" // the resource that is going to be accessed.
act := "read" // the operation that the user performs on the resource.
if res, _ := e.Enforce(sub, obj, act); res {
// permit alice to read data1
} else {
// deny the request, show an error
}
静的ポリシーファイルに加えて、Apache Casbinは実行時に権限管理を行うAPIも提供します。たとえば、ユーザーに割り当てられたすべてのロールを次のように取得できます:
roles, _ := e.GetImplicitRolesForUser(sub)
その他の使用方法については、ポリシー管理APIを参照してください。
Apache Casbinは権限を管理するための2つのAPIセットを提供します:
モデル管理とポリシー管理のためのWebベースのUIも提供しています:


https://casbin.apache.org/docs/adapters
https://casbin.apache.org/docs/watchers
https://casbin.apache.org/docs/role-managers
https://casbin.apache.org/docs/benchmark
Webフレームワーク向けのAuthzミドルウェア: https://casbin.apache.org/docs/middlewares
https://casbin.apache.org/docs/adopters
コントリビューションガイドをお読みください。
このプロジェクトは、貢献してくださるすべての人々によって成り立っています。
このプロジェクトはApache 2.0ライセンスの下でライセンスされています。
何か問題や機能リクエストがあれば、お問い合わせください。PRも歓迎します。
![]() | ![]() | ![]() | ![]() |
|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| 本番利用可能 | 本番利用可能 | 本番利用可能 | 本番利用可能 |
![]() | ![]() | ![]() | ![]() |
|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| 本番利用可能 | 本番利用可能 | 本番利用可能 | 本番利用可能 |
| モデル | モデルファイル | ポリシーファイル |
|---|