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 は、デフォルトのように、ビルトインの ログ を使用してコンソールにログを出力します。

2017/07/15 19:43:56 [Request: alice, data1, read ---> true]

ログはデフォルトで有効になっていません。 Enforcer.EnableLog() または NewEnforcer() の最後のパラメータで切り替えることができます。

note

Golangでは、モデルのロギング、要求の強制、ロール、ポリシーをすでにサポートしています。 ログを記録するための独自のログを定義することができます。 Pythonを使っているならば、pycasbinはデフォルトのPythonロギングメカニズムを利用します。 pycasbin パッケージはロガーを設定するために logging.getLogger() を呼び出します。 親アプリケーションでロガーを初期化する以外に特別なログ設定は必要ありません。 親アプリケーション内でロギングがintitilizedされていない場合、pycasbinからのログメッセージは表示されません。

異なるエンフォーサーに異なるロガーを使用する

すべてのエンフォーサーは、情報を記録する独自のロガーを持つことができ、実行時に変更することができます。

NewEnforcer()の最後のパラメータを介して、適切なロガーを使用することができます。 この方法を使ってエンフォーサーを初期化すれば enabled パラメータを使う必要はありません。ロガーの有効化されたフィールドの優先度が高くなります。

// Set a default logger as enforcer e1's logger. (Automatic Copy)
// This operation could also be seeed as changing the logger of e1 at run-time.
e1.SetLogger(&Log.DefaultLogger{})

// Enforcer e2 のロガーとして別のロガーを設定します。
e2.SetLogger(&YouOwnLogger)

// Enformere3を初期化するときにロガーを設定します。
e3, _ := casbin.NewEnforcer("examples/rbac_model.conf", a, logger)

サポートされているロガー

私たちはあなたが情報をログに記録するのを助けるためにいくつかのロガーを提供しています。

Go
PHP
Logger作成者説明
脱脂ロガー(内蔵)Casbingolangログを使用するデフォルトのロガー。
Zap loggerCasbinzapを使用すると、json エンコードされたログを提供し、独自の zap-logger でさらにカスタマイズできます。
Logger作成者説明
psr3-bridge loggerCasbinPSR-3 準拠のブリッジを提供します。

ロガーの書き込み方法

ロガーは Logger インターフェイスを実装する必要があります。

方法タイプ説明
EnableLog()mandatoryメッセージを印刷するかどうかを制御します。
IsEnabled()mandatory現在のロガーが有効な状態を表示します。
LogModel()mandatoryモデルに関連するログ情報。
LogEnforce()mandatoryエンフォースに関連するログ情報。
LogRole()mandatoryロールに関連するログ情報。
LogPolicy()mandatoryポリシーに関連するログ情報。

カスタム ロガー を Enforcer.SetLogger() に渡すことができます。

Golangのロガーをカスタマイズする例を以下に示します。

import (
    "fmt"
    "log"
    "strings"
)

// DefaultLogger is the implementation for a Logger using golang log.
type DefaultLogger struct {
    enabled bool
}

func (l *DefaultLogger) EnableLog(enable bool) {
    l.enabled = enable
}

func (l *DefaultLogger) IsEnabled() bool {
    return l.enabled
}

func (l *DefaultLogger) LogModel(model [][]string) {
    if !l.enabled {
        return
    }
    var str strings.Builder
    str.WriteString("Model: ")
    for _, v := range model {
        str.WriteString(fmt.Sprintf("%v\n", v))
    }

    log.Println(str.String())
}

func (l *DefaultLogger) LogEnforce(matcher string, request []interface{}, result bool, explains [][]string) {
    if !l.enabled {
        return
    }

    var reqStr strings.Builder
    reqStr.WriteString("Request: ")
    for i, rval := range request {
        if i != len(request)-1 {
            reqStr.WriteString(fmt.Sprintf("%v, ", rval))
        } else {
            reqStr.WriteString(fmt.Sprintf("%v", rval))
        }
    }
    reqStr.WriteString(fmt.Sprintf(" ---> %t\n", result))

    reqStr.WriteString("Hit Policy: ")
    for i, pval := range explains {
        if i != len(explains)-1 {
            reqStr.WriteString(fmt.Sprintf("%v, ", pval))
        } else {
            reqStr.WriteString(fmt.Sprintf("%v \n", pval))
        }
    }

    log.Println(reqStr.String())
}

func (l *DefaultLogger) LogPolicy(policy map[string][][]string) {
    if !l.enabled {
        return
    }

    var str strings.Builder
    str.WriteString("Policy: ")
    for k, v := range policy {
        str.WriteString(fmt.Sprintf("%s : %v\n", k, v))
    }

    log.Println(str.String())
}

func (l *DefaultLogger) LogRole(roles []string) {
    if !l.enabled {
        return
    }

    log.Println("Roles: ", roles)
}

エラー処理

次のような理由でCasbinを使用すると、エラーやパニックが発生する可能性があります。

  1. モデル ファイル (.conf) で無効な構文です。
  2. ポリシーファイル (.csv) の構文が無効です。
  3. ストレージアダプタからのカスタムエラー。例えば、MySQLは接続できません。
  4. Casbin's bug.

エラーやパニックに気をつける必要がある5つの主な関数があります。

関数エラー時の動作
NewEnforcer()返品エラー
LoadModel()返品エラー
LoadPolicy()返品エラー
SavePolicy()返品エラー
Enforce()返品エラー
note

NewEnforcer() calls LoadModel() and LoadPolicy() inside. So you don't have to call the latter two calls when using NewEnforcer().

有効 & 無効

エンフォーサーは Enforcer.EnableEnforce() 関数で無効にできます。 無効になっている場合、 Enforcer.Enforce() は常に true を返します。 ポリシーの追加や削除などの他の操作は影響を受けません。 例を示します:

e := casbin.NewEnforcer("examples/basic_model.conf", "examples/basic_policy.csv")

// Will return false.
// デフォルトでは、エンフォーサーは有効です。
e.Enforce("non-authorized-user", "data1", "read")

// 実行時に強制力を無効にする
e.EnableEnforce(false)

// Will return true for any request.
e.Enforce("non-authorized-user", "data1", "read")

// Enable the enforcer again.
e.EnableEnforce(true)

// Will return false.
e.Enforce("non-authorized-user", "data1", "read")
← カスビンサービスフロントエンドの使用法 →
  • ログ
    • 異なるエンフォーサーに異なるロガーを使用する
  • エラー処理
  • 有効 & 無効
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