Casbin

Casbin

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

›API

基本

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

モデル

  • サポートされるモデル
  • モデルの構文
  • エフェクト
  • 関数
  • 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

API の概要

この概要では、Casbin API の使用方法についてのみ説明し、Casbin のインストール方法および動作方法について説明しません。 You can find those tutorials here: installation of Casbin and how Casbin works. したがって、このチュートリアルを読み始めると、完全にインストールされ、Casbinをコードにインポートしたと仮定します。

APIを強制する

CasbinのEnforceAPIから始めましょう。 model.confからRBACモデルを読み込み、 policy.csv からポリシーを読み込みます。 You can learn the Model syntax here, and we won't talk about it in this tutorial. 以下の設定ファイルを理解できると仮定します。

model.conf

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act

policy.csv

p, admin, data1, read
p, admin, data1, write
p, admin, data2, read
p, admin, data2, write
p, alice, data1, read
p, bob, data2, write
g, amber, admin
g, abc, admin

設定ファイルを読み込んだ後、以下のコードをお読みください。

// load information from files
enforcer, err := casbin.NewEnforcer("./example/model.conf", "./example/policy.csv")
if err != nil {
    log.Fatalf("error, detail: %s", err)
}
ok, err := enforcer.Enforce("alice", "data1", "read")

このコードは、ローカルファイルからアクセス制御モデルとポリシーをロードします。 関数 casbin.NewEnforcer() はエンフォーサーを返す。 2つのパラメータをファイルパスとして認識し、そこからファイルをロードします。 プロセスで発生したエラーは err に保存されます。 このコードは、モデルとポリシーをロードするためにデフォルトのアダプタを使用しました。 もちろん、サードパーティ製のアダプタを使用して同じ結果を得ることができます。

Code ok, err := enforcer.Enforce("alice", "data1", "read") はアクセス権限を確認するものです。 alice が操作読み取りで data1 にアクセスできる場合。 返される値 ok は trueになります。そうでなければ、 false になります。 この例では、 ok の値は true です。

EnforceEx API

時々、どのポリシーがリクエストを許可したのか疑問に思うかもしれないので、関数 EnforceEx() を用意しました。 以下のように使用できます。

ok, reason, err := enforcer.EnforceEx("amber", "data1", "read")
fmt.Println(ok, reason) // true [admin data1 read]

function EnforceEx() は戻り値の 理由の に正確なポリシー文字列を返します。 In this example, amber is a role of admin, so policy p, admin, data1, read made this request true. このコードの出力はコメントにあります。

CasbinはこのようなAPIをたくさん用意しました。 これらの API は、基本的な関数にいくつかの追加機能を追加しました。 それらは次のとおりです:

  • ok, err := enforcer.EnforceWithMatcher(matcher, request)

    マッチャー付き。

  • ok, reason, err := enforcer.EnforceExWithMatcher(matcher, request)

    EnforceWithMatcher() と EnforceEx() の組み合わせ。

  • boolean Array, err := enforcer.BatchEnforce(requests)

    リスト・ジョブを実行し、配列を返します。

これはCasbinのシンプルな使い方です。 Casbinを使用して、これらのAPI経由で認証サーバーを開始できます。 次の段落では、他のいくつかの種類の API を紹介します。

管理API

Get API

これらの API はポリシー内の正確なオブジェクトを取得するために使用されます。 今回は、最後の例のような施行者をロードし、そこから何かを得ます。

以下のコードをお読みください:

enforcer,err := casbin.NewEnforcer("./example/model.conf", "./example/policy.csv")
if err != nil {
    fmt.Printf("Error, details: %s\n", err)
}
allSubjects := enforcer.GetAllSubjects()
fmt.Println(allSubjects)

前の例と同様に、最初の4行はローカルファイルから必要な情報をロードしました。 ここではそれについてもう話しません。

コード allSubjects := enforcer.GetAllSubjects() ポリシーファイル内のすべてのサブジェクトを取得し、配列として返しました。 その配列を印刷しました

通常、コードの出力は次のようになります:

[adminアリス・ボブ]

関数 GetAllSubjects() を GetAllNamedSubjects() に変更することもできます。 現在のポリシーに現れる被験者のリストを取得します。

同様に、 オブジェクト、アクション、ロール の GetAll 関数を用意しました。 関数名の 件名 という単語を、関数にアクセスしたい場合に必要な単語に変更するだけです。

さらに、我々は政策のためのより多くの取得を持っています。 callメソッドとreturn値は上記と似ています。

  • policy = e.GetPolicy() は、ポリシーのすべての認可ルールを取得します。
  • filteredPolicy := e.GetFilteredPolicy(0, "alice") は、ポリシー内のすべての認可ルールを取得し、フィールドフィルタを指定することができます。
  • namedPolicy := e.GetNamedPolicy("p") は、指定されたポリシー内のすべての認可ルールを取得します。
  • filteredNamedPolicy = e.GetFilteredNamedPolicy("p", 0, "bob") は、名前付きポリシー内のすべての認可ルールを取得し、フィールドフィルタを指定することができます。
  • groupingPolicy := e.GetGroupingPolicy() は、ポリシー内のすべてのロール継承ルールを取得します。
  • filteredGroupingPolicy := e.GetFilteredGroupingPolicy(0, "alice") は、ポリシー内のすべてのロール継承ルールを取得し、フィールドフィルタを指定することができます。
  • namedGroupingPolicy := e.GetNamedGroupingPolicy("g") は、ポリシーのすべてのロール継承ルールを取得します。
  • namedGroupingPolicy := e.GetFilteredNamedGroupingPolicy("g", 0, "alice") は、ポリシー内のすべてのロール継承ルールを取得します。

追加、削除、API の更新

Casbinはポリシー用の多くのAPIを用意しました。 これらの API を使用すると、実行時にポリシーを動的に追加、削除、または編集することができます。

このコードは、ポリシーを追加、削除、更新する方法、およびポリシーが存在することを確認する方法を示します。

// load information from files
enforcer,err := casbin.NewEnforcer("./example/model.conf", "./example/policy.csv")
if err != nil {
   fmt.Printf("Error, details: %s\n", err)
}

// add a policy, then use HasPolicy() to confirm that
enforcer.AddPolicy("added_user", "data1", "read")
hasPolicy := enforcer.HasPolicy("added_user", "data1", "read")
fmt.Println(hasPolicy) // true, we added that policy successfully

// remove a policy, then use HasPolicy() to confirm that
enforcer.RemovePolicy("alice", "data1", "read")
hasPolicy = enforcer.HasPolicy("alice", "data1", "read")
fmt.Println(hasPolicy) // false, we deleted that policy successfully

// update a policy, then use HasPolicy() to confirm that
enforcer.UpdatePolicy([]string{"added_user", "data1", "read"}, []string{"added_user", "data1", "write"})
hasPolicy = enforcer.HasPolicy("added_user", "data1", "read")
fmt.Println(hasPolicy) // false, the origin policy has lapsed
hasPolicy = enforcer.HasPolicy("added_user", "data1", "write")
fmt.Println(hasPolicy) // true, the new policy is in use

これらの4種類の API を使用してポリシーを編集できます。 このように、 FilteredPolicy、NamedPolicy、FilteredNamedPolicy、GroupingPolicy、NamedGroupingPolicy、FilteredGroupingPolicy、FilteredNamedGroupingPolicy に同じ種類のAPIを用意しました。 これらを使用するには、関数名のワード ポリシー を上記の単語に置き換える必要があります。

また、パラメータを配列に変更する場合は、ポリシーの編集をバッチ処理できます。

例えば、以下のように機能します。

enforcer.UpdatePolicy([]string{"eve", "data3", "read"}, []string{"eve", "data3", "write"})

ポリシー を ポリシーに変更し、パラメータを次のように編集する場合:

enforcer.UpdatePolicies([][]string{{"eve", "data3", "read"}, {"jack", "data3", "read"}}, [][]string{{"eve", "data3", "write"}", "jack", "data3", "write"}})

これらのポリシーを一括編集できます

同じ操作は GroupingPolicy, NamedGroupingPolicy にも有用です。

RBAC API

CasbinはRBACモデルとポリシーを変更するためのAPIを提供しています。 RBAC に慣れていれば、これらの API を簡単に使用できます。

ここでは、CasbinのRBAC APIの使用方法についてのみ説明し、RBAC自体について説明しません。 You can get more details here.

以前と同じように、モデルやポリシーをロードするためにこのコードを使用します。

enforcer,err := casbin.NewEnforcer("./example/model.conf", "./example/policy.csv")
if err != nil {
    fmt.Printf("Error, details: %s\n", err)
}

次に、これらのAPIにアクセスするためにEnforcer enforcer のインスタンスを使用します。

roles, err := enforcer.GetRolesForUser("amber")
fmt.Println(roles) // [admin]
users, err := enforcer.GetUsersForRole("admin")
fmt.Println(users) // [amber abc]

GetRolesForUser() は、琥珀を含むすべてのロールを含む配列を返した。 この例では、amber にロール管理者が 1 つしかないため、array roles は [admin] です。 同様に、 GetUsersForRole() を使用して、ユーザーがロールに属するようにすることもできます。 この関数の戻り値も配列です。

enforcer.HasRoleForUser("amber", "admin") // true

HasRoleForUser() を使用して、ユーザーがロールに属しているかどうかを確認できます。 この例では、amber は admin のメンバーなので、関数の戻り値は true です。

fmt.Println(enforcer.Enforce("bob", "data2", "write")) // true
enforcer.DeletePermission("data2", "write")
fmt.Println(enforcer.Enforce("bob", "data2", "write")) // false

権限を削除するには DeletePermission() を使用できます。

fmt.Println(enforcer.Enforce("alice", "data1", "read")) // true
enforcer.DeletePermissionForUser("alice", "data1", "read")
fmt.Println(enforcer.Enforce("alice", "data1", "read")) // false

また、 DeletePermissionForUser() を使用して、ユーザの権限を削除します。

CasbinにはこのようなAPIがたくさんあります。 これらのメソッドの呼び出しと戻り値は上記の API と同じスタイルを持ちます。 You can find these APIs in next documents.

← Cloud Native Middlewares管理API →
  • APIを強制する
  • EnforceEx API
  • 管理API
    • Get API
    • 追加、削除、API の更新
  • RBAC API
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