Zum Hauptinhalt springen

Richtlinien-Untermengenladen

Einige Adapter unterstĂŒtzen gefiltertes Richtlinien-Management. Dies bedeutet, dass die von Casbin geladene Richtlinie eine Teilmenge der Richtlinie im Speicher ist, die auf einem bestimmten Filter basiert. Dies ermöglicht eine effiziente Durchsetzung der Richtlinien in großen, mehrköpfigen Umgebungen, wenn das Parsen der gesamten Politik zu einem LeistungsengpĂ€ck wird.

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

Es gibt eine andere Methode, die das Laden von UntermenĂŒs unterstĂŒtzt: LoadIncrementalFilteredPolicy. LoadIncrementalFilteredPolicy ist Ă€hnlich wie LoadFilteredPolicy, aber es löscht keine vorherige geladene Richtlinie, sondern nur angehĂ€ngt.