跳转至主要内容

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".

还有另一种方法支持子集加载功能:LoadIncrementalFilteredPolicyLoadIncrementalFilteredPolicy 类似于 LoadFilteredPolicy,但它不会清除先前加载的策略。 它只是将过滤后的策略添加到现有策略中。