Загрузка подмножеств политики
Некоторые адаптеры поддерживают загрузку фильтрованной политики: из хранилища загружается только подмножество политик согласно фильтру. Это снижает потребление памяти и повышает скорость в крупных или многопользовательских средах, где загрузка полного набора политик нецелесообразна.
Вызовите LoadFilteredPolicy(filter) с поддерживаемым адаптером. Формат фильтра зависит от адаптера. При использовании фильтрованной загрузки функция SavePolicy() отключается, чтобы вы случайно не перезаписали полную политику.
Пример: фильтрованный файловый адаптер с моделью RBAC с доменами. Фильтр загружает только политики для domain1:
import (
"github.com/casbin/casbin/v3"
fileadapter "github.com/casbin/casbin/v3/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)
// Only policies for "domain1" are loaded.
Функция LoadIncrementalFilteredPolicy(filter) работает аналогично LoadFilteredPolicy, но добавляет отфильтрованные политики к текущей политике в памяти вместо замены её целиком. Вы можете объединить несколько фильтрованных загрузок (например, по тенантам) в одном энфорсере.
Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.