Langkau ke kandungan utama

Policy Subset Loading

Sesetengah pengaya menyokong pengurusan polisi yang disaring. Ini bermakna polisi yang dimuatkan oleh Casbin adalah subset dari polisi yang disimpan dalam pangkalan data berdasarkan penapis yang diberikan. Ini membolehkan pelaksanaan polisi yang cekap dalam persekitaran besar dan berbilang penyewa di mana menghuraikan keseluruhan polisi menjadi penghambat prestasi.

Untuk menggunakan polisi yang disaring dengan pengaya yang disokong, cukup panggil kaedah LoadFilteredPolicy. Format yang sah untuk parameter penapis bergantung pada pengaya yang digunakan. Untuk mengelakkan kehilangan data secara tidak sengaja, kaedah SavePolicy dilumpuhkan apabila dasar yang disaring dimuatkan.

Sebagai contoh, coretan kod berikut menggunakan penyesuai fail yang disaring dalam terbina dalam dan model RBAC dengan domain. Dalam kes ini, penapis menyekat dasar kepada satu domain sahaja. Mana-mana baris dasar untuk domain selain "domain1" dikecualikan daripada dasar yang dimuatkan:

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

Terdapat satu lagi kaedah yang menyokong ciri pemuatan subset: LoadIncrementalFilteredPolicy. LoadIncrementalFilteredPolicy adalah serupa dengan LoadFilteredPolicy, tetapi ia tidak mengosongkan dasar yang telah dimuatkan sebelumnya. Ia hanya menambah dasar yang disaring kepada dasar yang sedia ada.