Vai al contenuto principale

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.