Zum Hauptinhalt springen

Richtlinien-Untermengenladen

Einige Adapter unterstützen gefiltertes Richtlinien-Management. This means that the policy loaded by Casbin is a subset of the policy stored in the database based on a given filter. This allows for efficient policy enforcement in large, multi-tenant environments where parsing the entire policy becomes a performance bottleneck.

Um gefilterte Richtlinien mit einem unterstützten Adapter zu verwenden, rufen Sie einfach die LoadFilteredPolicy Methode auf. Das gültige Format für den Filterparameter hängt vom verwendeten Adapter ab. Um unbeabsichtigten Datenverlust zu verhindern, ist die Methode SavePolicy deaktiviert, wenn eine gefilterte Richtlinie geladen wird.

Zum Beispiel verwendet das folgende Code-Snippet den eingebauten gefilterten Datei-Adapter und das RBAC-Modell mit Domänen. In diesem Fall beschränkt der Filter die Richtlinie auf eine einzige Domäne. Alle Richtlinien-Zeilen für andere Domains als "domain1" werden in der geladenen Richtlinie weggelassen:

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

There is another method that supports the subset loading feature: LoadIncrementalFilteredPolicy. LoadIncrementalFilteredPolicy is similar to LoadFilteredPolicy, but it does not clear the previously loaded policy. It only appends the filtered policy to the existing policy.