Перейти к основному контенту

Policy Subset Loading

Некоторые адаптеры поддерживают управление отфильтрованными политиками. Это означает, что политика, загруженная Casbin, является подмножеством политики, хранящейся в базе данных, на основе заданного фильтра. Это позволяет эффективно применять политику в больших многопользовательских средах, где анализ всей политики становится узким местом производительности.

Чтобы использовать отфильтрованные политики с поддерживаемым адаптером, просто вызовите метод LoadFilteredPolicy. Допустимый формат для параметра фильтра зависит от используемого адаптера. Чтобы предотвратить случайную потерю данных, метод SavePolicy отключается при загрузке отфильтрованной политики.

Например, следующий фрагмент кода использует встроенный адаптер отфильтрованных файлов и модель RBAC с доменами. В этом случае фильтр ограничивает политику одним доменом. Любые строки политики для доменов, отличных от "domain1", исключаются из загруженной политики:

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

Существует еще один метод, поддерживающий функцию загрузки подмножества: LoadIncrementalFilteredPolicy. LoadIncrementalFilteredPolicy аналогичен LoadFilteredPolicy, но он не очищает ранее загруженную политику. Он только добавляет отфильтрованную политику к существующей политике.