Node.js Casbin について学ぶ

青灯夜游
青灯夜游転載
2020-08-19 10:16:452828ブラウズ

Node.js Casbin について学ぶ

#【ビデオチュートリアルの推奨:

nodejs チュートリアル

概要

Casbin は、強力かつ効率的なオープンソースのアクセス制御フレームワークであり、その権限管理メカニズムが複数のアクセス制御モデルをサポートしています。

キャスビンとは何ですか?

Casbin は次のことができます:

    カスタム リクエスト形式をサポートします。デフォルトのリクエスト形式は {subject, object, action} です。 。
  • これには、アクセス制御モデル モデルとポリシー ポリシーという 2 つの中心的な概念があります。
  • RBAC でのマルチレベルのロール継承のサポートサブジェクトだけでなく、リソースもロールを持つことができます。
  • root や管理者など、認可ポリシーによる制限を受けることなくあらゆるリソースにアクセスできるスーパー ユーザーをサポートします。
  • keyMatch などのさまざまな組み込み演算子をサポートし、/foo/bar を /foo にマッピングできるなど、パスベースのリソースの管理を容易にします*

Casbin は次のことはできません:

# ID 認証 (つまり、ユーザーのユーザー名とパスワードの検証)。casbin はアクセス制御のみを担当します。 ID 認証を担当する他の特殊なコンポーネントがあり、その後 casbin がアクセス制御を実行する必要があり、この 2 つは連携して動作します。
  • ユーザーリストまたはロールリストを管理します。 Casbin は、プロジェクト自体がユーザーとロールのリストを管理することがより適切であると考えています。通常、ユーザーはパスワードを持っていますが、Casbin はパスワードを保存するコンテナとして設計されていません。代わりに、ユーザーとロールの間のマッピング関係を RBAC スキームに保存します。

#ドキュメントcasbin.org/docs/en/overview

インストール
# NPMnpm install casbin --save# Yarnyarn add casbin

始めましょうCasbin エンフォーサを作成するには、パラメータとしてモデル ファイルとポリシー ファイルが必要です:
import { newEnforcer } from 'casbin';const enforcer = await newEnforcer('basic_model.conf', 'basic_policy.csv');

ファイルの代わりに DB 内のポリシーを使用してエンフォーサを初期化することもできます。詳細については、「アダプタ」を参照してください。

const sub = 'alice'; // 想要访问资源的用户。const obj = 'data1'; // 将要访问的资源。const act = 'read'; // 用户对资源执行的操作。const res = await enforcer.enforce(sub, obj, act);if (res) {
  // 允许 alice 读取数据1} else {
  // 拒绝请求,显示错误}
静的ポリシー ファイルに加えて、

node-casbin

は実行時の権限管理用の API も提供します。たとえば、次のようにユーザーに割り当てられたすべてのロールを取得できます。 #
const roles = await enforcer.getRolesForUser('alice');

その他の使用方法については、Management API と RBAC API を参照してください。

動作原理

Casbin では、アクセス制御モデルは PERM (ポリシー、エフェクト、リクエスト、マッチャー) に基づいてファイルに抽象化されます。 。したがって、プロジェクトの承認メカニズムの切り替えまたはアップグレードは、構成を変更するのと同じくらい簡単です。利用可能なモデルを組み合わせて、独自のアクセス制御モデルをカスタマイズできます。たとえば、RBAC ロールと ABAC 属性を 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

これは、次のことを意味します:

alice はデータを読み取ることができます1

bob can write data2
    長すぎる単一行の設定の場合は、最後に '' を追加して改行することもできます:
# Matchers[matchers]m = r.sub == p.sub && r.obj == p.obj \ 
  && r.act == p.act
  • さらに、ABAC の場合は、次のようにすることができます。 Casbin golang バージョンを使用してください。次の操作を試してください (jCasbin と Node-Casbin ではまだサポートされていません):
    # Matchers[matchers]m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
  • ただし、配列の長さが 1

    より大きいことを確認する必要があります。そうでない場合は、パニックを引き起こします。

    その他の操作については、govaluate をチェックしてください。 プログラミング関連の知識について詳しくは、

    プログラミング入門

    をご覧ください。 !

    以上がNode.js Casbin について学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。