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

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, але не очищає раніше завантажену політику. Він лише додає відфільтровану політику до існуючої політики.