Ana içeriğe atla

Policy Subset Loading

Bazı adaptörler filtrelenmiş politika yönetimini destekler. Bu, Casbin tarafından yüklenen politikanın, veritabanında saklanan politikanın, belirli bir filtreye dayalı olarak bir alt kümesi olduğu anlamına gelir. Bu, tüm politikayı ayrıştırmanın performans sorunu haline geldiği büyük, çok kiracılı ortamlarda etkili politika uygulamasına olanak tanır.

Desteklenen bir adaptörle filtrelenmiş politikaları kullanmak için, sadece LoadFilteredPolicy metodunu çağırın. Filtre parametresi için geçerli format, kullanılan adaptöre bağlıdır. Yanlışlıkla veri kaybını önlemek için, filtrelenmiş bir politikanın yüklendiği durumlarda SavePolicy metodu devre dışı bırakılır.

Örneğin, aşağıdaki kod parçacığı yerleşik filtrelenmiş dosya adaptörünü ve alanlarla birlikte RBAC modelini kullanır. Bu durumda, filtre politikayı tek bir alana sınırlar. "domain1" dışındaki alanlar için herhangi bir politika satırı, yüklenen politikadan çıkarılır:

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

Alt küme yükleme özelliğini destekleyen başka bir metod daha bulunmaktadır: LoadIncrementalFilteredPolicy. LoadIncrementalFilteredPolicy, LoadFilteredPolicy'ye benzer, ancak daha önce yüklenen politikayı temizlemez. Sadece filtrelenmiş politikayı mevcut politikaya ekler.