Pular para o conteúdo principal

Policy Subset Loading

Alguns adaptadores suportam gerenciamento de políticas filtradas. Isso significa que a política carregada pelo Casbin é um subconjunto da política armazenada no banco de dados com base em um filtro dado. Isso permite a aplicação eficiente de políticas em ambientes grandes e multi-tenant, onde a análise da política inteira se torna um gargalo de desempenho.

Para usar políticas filtradas com um adaptador compatível, basta chamar o método LoadFilteredPolicy. O formato válido para o parâmetro de filtro depende do adaptador usado. Para evitar perda acidental de dados, o método SavePolicy é desativado quando uma política filtrada é carregada.

Por exemplo, o seguinte trecho de código usa o adaptador de arquivo filtrado embutido e o modelo RBAC com domínios. Neste caso, o filtro limita a política a um único domínio. Quaisquer linhas de política para domínios diferentes de "domain1" são omitidas da política carregada:

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

Há outro método que suporta o recurso de carregamento de subconjunto: LoadIncrementalFilteredPolicy. LoadIncrementalFilteredPolicy é semelhante a LoadFilteredPolicy, mas não limpa a política previamente carregada. Ele apenas acrescenta a política filtrada à política existente.