Ana içeriğe atla

Loading Policy Subsets

Some adapters support filtered policy loading: only a subset of policies is loaded from storage according to a filter. That reduces memory and speed in large or multi-tenant setups where loading the full policy set is impractical.

Call LoadFilteredPolicy(filter) with a supported adapter. The filter shape is adapter-specific. When using filtered loading, SavePolicy() is disabled so you don’t overwrite the full policy by mistake.

Example: filtered file adapter with an RBAC-with-domains model. The filter loads only policies for 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) works like LoadFilteredPolicy but adds the filtered policies to the current in-memory policy instead of replacing it. You can combine several filtered loads (e.g. per tenant) into one enforcer.