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
, но он не очищает ранее загруженную политику. Он только добавляет отфильтрованную политику к существующей политике.