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

Загрузка подмножеств политики

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

Вызовите 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.