Policy Subset Loading
一部のアダプタは、フィルタリングされたポリシーマネジメントをサポートしています。 これは、Casbinによって読み込まれるポリシーが、指定されたフィルタに基づいてデータベースに保存されているポリシーのサブセットであることを意味します。 これにより、全体のポリシーを解析することがパフォーマンスのボトルネックとなる大規模なマルチテナント環境で、効率的なポリシーの強制が可能になります。
サポートされているアダプタでフィルタリングされたポリシーを使用するには、単に LoadFilteredPolicy
メソッドを呼び出すだけです。 フィルタパラメータの有効な形式は、使用されるアダプタによります。 偶発的なデータ損失を防ぐために、フィルタリングされたポリシーが読み込まれたときには SavePolicy
メソッドが無効になります。
例えば、次のコードスニペットは、組み込みのフィルタリングされたファイルアダプタとドメイン付きのRBACモデルを使用しています。 この場合、フィルタはポリシーを単一のドメインに制限します。 "domain1"
以外のドメインのポリシーラインは、読み込まれたポリシーから省略されます:
import (
"github.com/casbin/casbin/v2"
fileadapter "github.com/casbin/casbin/v2/persist/file-adapter"
)
enforcer, _ := casbin.NewEnforcer()
adapter := fileadapter.NewFilteredAdapter("examples/rbac_with_domains_policy.csv")
enforcer.InitWithAdapter("examples/rbac_with_domains_model.conf", adapter)
filter := &fileadapter.Filter{
P: []string{"", "domain1"},
G: []string{"", "", "domain1"},
}
enforcer.LoadFilteredPolicy(filter)
// The loaded policy now only contains the entries pertaining to "domain1".
サブセットの読み込み機能をサポートする別のメソッドがあります:LoadIncrementalFilteredPolicy
。 LoadIncrementalFilteredPolicy
はLoadFilteredPolicy
に似ていますが、以前に読み込まれたポリシーをクリアしません。 フィルタリングされたポリシーを既存のポリシーに追加するだけです。