Policy Subset Loading
Einige Adapter unterstützen die Verwaltung von gefilterten Richtlinien. Das bedeutet, dass die von Casbin geladene Richtlinie eine Teilmenge der in der Datenbank gespeicherten Richtlinie basierend auf einem gegebenen Filter ist. Dies ermöglicht eine effiziente Durchsetzung von Richtlinien in großen, mehrmandantenfähigen Umgebungen, in denen das Parsen der gesamten Richtlinie zu einem Leistungsengpass wird.
Um gefilterte Richtlinien mit einem unterstützten Adapter zu verwenden, rufen Sie einfach die Methode LoadFilteredPolicy
auf. Das gültige Format für den Filterparameter hängt vom verwendeten Adapter ab. Um versehentlichen Datenverlust zu verhindern, wird die Methode SavePolicy
deaktiviert, wenn eine gefilterte Richtlinie geladen ist.
Zum Beispiel verwendet der folgende Codeausschnitt den eingebauten gefilterten Dateiadapter und das RBAC-Modell mit Domänen. In diesem Fall beschränkt der Filter die Richtlinie auf eine einzelne Domäne. Alle Richtlinienzeilen für Domänen, die nicht "domain1" sind, werden aus der geladenen Richtlinie ausgelassen:
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".
Es gibt eine weitere Methode, die die Teilmenge-Ladefunktion unterstützt: LoadIncrementalFilteredPolicy
. LoadIncrementalFilteredPolicy
ähnelt LoadFilteredPolicy
, löscht jedoch nicht die zuvor geladene Richtlinie. Es fügt nur die gefilterte Richtlinie zur bestehenden Richtlinie hinzu.