주요 콘텐츠로 건너뛰기

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. LoadIncrementalFilteredPolicyLoadFilteredPolicy와 비슷하지만, 이전에 로드된 정책을 지우지 않습니다. 그것은 단지 필터링된 정책을 기존 정책에 추가만 합니다.