Passer au contenu principal

Chargement du sous-ensemble de la politique

Certains adaptateurs prennent en charge la gestion des politiques filtrées. 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.

Pour utiliser des règles filtrées avec un adaptateur pris en charge, appelez simplement la méthode LoadFilteredPolicy. Le format valide pour le paramètre de filtre dépend de l'adaptateur utilisé. Pour éviter la perte accidentelle de données, la méthode SavePolicy est désactivée lorsqu'une politique filtrée est chargée.

Par exemple, le code snippet suivant utilise l'adaptateur de fichier filtré intégré et le modèle RBAC avec des domaines. Dans ce cas, le filtre limite la règle à un seul domaine. Toutes les lignes de régulation pour les domaines autres que "domain1" sont omises de la politique chargée :

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.