Loading Policy Subsets
部分 适配器 支持 过滤加载策略:按过滤条件只从存储中加载一部分策略。在加载全部策略不现实的大型或多租户环境中,这可以减少内存占用、提升速度。
对支持的适配器调用 LoadFilteredPolicy(filter)。过滤条件的结构由适配器决定。使用过滤加载时,SavePolicy() 会被禁用,以免误覆盖全部策略。
示例:配合带域 RBAC 模型使用的过滤文件适配器。这个过滤条件只加载 domain1 的策略:
import (
"github.com/casbin/casbin/v3"
fileadapter "github.com/casbin/casbin/v3/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)
// Only policies for "domain1" are loaded.
LoadIncrementalFilteredPolicy(filter) 与 LoadFilteredPolicy 类似,但会把过滤出的策略 追加 到当前内存中的策略里,而不是替换。可以把多次过滤加载(例如按租户)组合到同一个 enforcer 中。