Passer au contenu principal

Policy Subset Loading

Certains adaptateurs prennent en charge la gestion des politiques filtrées. Cela signifie que la politique chargée par Casbin est un sous-ensemble de la politique stockée dans la base de données en fonction d'un filtre donné. Cela permet une application efficace de la politique dans de grands environnements multi-locataires où l'analyse de l'ensemble de la politique devient un goulot d'étranglement des performances.

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

Par exemple, l'extrait de code suivant utilise l'adaptateur de fichier filtré intégré et le modèle RBAC avec des domaines. Dans ce cas, le filtre limite la politique à un seul domaine. Toutes les lignes de politique pour des 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".

Il existe une autre méthode qui prend en charge la fonctionnalité de chargement de sous-ensemble : LoadIncrementalFilteredPolicy. LoadIncrementalFilteredPolicy est similaire à LoadFilteredPolicy, mais elle ne supprime pas la politique précédemment chargée. Elle ajoute seulement la politique filtrée à la politique existante.