Policy Subset Loading
Alcuni adattatori supportano la gestione delle politiche filtrate. Ciò significa che la politica caricata da Casbin è un sottoinsieme della politica memorizzata nel database in base a un filtro specifico. Questo permette un'efficace applicazione delle politiche in ambienti di grandi dimensioni e multi-tenant, dove l'analisi dell'intera politica diventa un collo di bottiglia per le prestazioni.
Per utilizzare le politiche filtrate con un adattatore supportato, basta chiamare il metodo LoadFilteredPolicy
. Il formato valido per il parametro del filtro dipende dall'adattatore utilizzato. Per evitare la perdita accidentale di dati, il metodo SavePolicy
è disabilitato quando viene caricata una policy filtrata.
Ad esempio, il seguente snippet di codice utilizza l'adattatore di file filtrato integrato e il modello RBAC con domini. In questo caso, il filtro limita la policy a un singolo dominio. Qualsiasi linea di policy per domini diversi da "domain1"
viene omessa dalla policy caricata:
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".
Esiste un altro metodo che supporta la funzionalità di caricamento di un sottoinsieme: LoadIncrementalFilteredPolicy
. LoadIncrementalFilteredPolicy
è simile a LoadFilteredPolicy
, ma non cancella la policy precedentemente caricata. Aggiunge solo la policy filtrata alla policy esistente.