メインコンテンツにスキップ

RBAC with Pattern

クイックスタート

  • g(_, _)でパターンを使用します。

    e, _ := NewEnforcer("./example.conf", "./example.csv")
    e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • ドメインでパターンを使用します。

    e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • すべてのパターンを使用します。

    両方のAPIの使用を組み合わせるだけです。

上記のように、enforcerインスタンスを作成した後、AddNamedMatchingFuncAddNamedDomainMatchingFuncAPIを通じてパターンマッチングを有効にする必要があります。これらはパターンがどのようにマッチするかを決定します。

メモ

オンラインエディタを使用する場合、左下の角でパターンマッチング関数を指定します。 editor-tips

RBACでのパターンマッチングの使用

時々、特定のパターンを持つ特定の主体、オブジェクト、またはドメイン/テナントに自動的に役割を付与したい場合があります。 RBACのパターンマッチング関数は、それを実現するのに役立ちます。 パターンマッチング関数は、前のマッチャー関数と同じパラメータと戻り値を共有します。

パターンマッチング関数はgの各パラメータをサポートします。

通常、RBACはマッチャーでg(r.sub, p.sub)として表現されることを知っています。 その後、以下のようなポリシーを使用できます:

p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group

したがって、alicebook 1book 2を含むすべての本を読むことができます。 しかし、数千冊の本があり、各本を一つのgポリシールールで本の役割(またはグループ)に追加するのは非常に面倒です。

しかし、パターンマッチング関数を使用すると、ポリシーを一行で書くことができます:

g, /book/:id, book_group

Casbinは自動的に/book/1/book/2をパターン/book/:idにマッチさせます。 あなたはエンフォーサーで関数を登録するだけでよいです:

e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

ドメイン/テナントでパターンマッチング関数を使用する場合、エンフォーサーとモデルで関数を登録する必要があります。

e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

もしg(r.sub, p.sub, r.dom)が何を意味するのかわからない場合は、rbac-with-domainsを読んでください。 要するに、g(r.sub, p.sub, r.dom)はユーザーr.subがドメインr.domで役割p.subを持っているかどうかを確認します。 これがマッチャーの動作方法です。 完全な例はここで見ることができます。

上記のパターンマッチング構文とは別に、純粋なドメインパターンも使用できます。

例えば、subが異なるドメイン、domain1domain2でアクセスを持つことを望む場合、純粋なドメインパターンを使用できます:

p, admin, domain1, data1, read
p, admin, domain1, data1, write
p, admin, domain2, data2, read
p, admin, domain2, data2, write

g, alice, admin, *
g, bob, admin, domain2

この例では、aliceがdomain1とdomain2でdataを読み書きすることを望んでいます。 gでのパターンマッチング*は、aliceが二つのドメインにアクセスできるようにします。

パターンマッチングを使用することで、特に複雑で多くのドメインやオブジェクトを考慮する必要があるシナリオでは、policy_definitionをよりエレガントで効果的な方法で実装することができます。