주요 콘텐츠로 건너뛰기

Watchers

etcd와 같은 분산 메시징 시스템의 사용을 지원하여 여러 Casbin enforcer 인스턴스 간의 일관성을 유지합니다. 이를 통해 사용자들이 동시에 여러 Casbin enforcer를 사용하여 대량의 권한 확인 요청을 처리할 수 있습니다.

정책 저장 어댑터와 마찬가지로, 주 라이브러리에 watcher 코드를 포함시키지 않습니다. 새로운 메시징 시스템에 대한 지원은 watcher로 구현되어야 합니다. Casbin watcher의 전체 목록은 아래에 제공됩니다. 새로운 watcher에 대한 제3자 기여를 환영하며, 알려주시면 이 목록에 추가하겠습니다:

WatcherTypeAuthorDescription
PostgreSQL WatcherExDatabase@IguteChungWatcherEx for PostgreSQL
Redis WatcherExKV storeCasbinWatcherEx for Redis
Redis WatcherKV store@billcobblerWatcher for Redis
Etcd WatcherKV storeCasbinWatcher for etcd
TiKV WatcherKV storeCasbinWatcher for TiKV
Kafka WatcherMessaging system@wgarunapWatcher for Apache Kafka
NATS WatcherMessaging systemSolutoWatcher for NATS
ZooKeeper WatcherMessaging systemGrepsrWatcher for Apache ZooKeeper
NATS, RabbitMQ, GCP Pub/Sub, AWS SNS & SQS, Kafka, InMemoryMessaging System@rusenaskWatcher based on Go Cloud Dev Kit that works with leading cloud providers and self-hosted infrastructure
NATS, RabbitMQ, GCP Pub/Sub, AWS SNS & SQS, Kafka, InMemoryMessaging System@bartventerWatcherEx based on Go Cloud Dev Kit that works with leading cloud providers and self-hosted infrastructure
RocketMQ WatcherMessaging system@fmyxyzWatcher for Apache RocketMQ

WatcherEx

여러 인스턴스 간의 증분 동기화를 지원하기 위해, WatcherEx 인터페이스를 제공합니다. 정책이 변경될 때 다른 인스턴스에 알릴 수 있기를 바라지만, 현재 WatcherEx의 구현은 없습니다. 이를 달성하기 위해 디스패처를 사용하는 것을 권장합니다.

Watcher 인터페이스와 비교하여, WatcherExAddPolicyRemovePolicy 등 업데이트 액션의 유형을 구분할 수 있습니다.

WatcherEx Apis:

API설명
SetUpdateCallback(func(string)) errorSetUpdateCallback은 다른 인스턴스에 의해 DB의 정책이 변경되었을 때 watcher가 호출할 콜백 함수를 설정합니다. 클래식 콜백은 Enforcer.LoadPolicy()입니다.
Update() errorUpdate는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. 일반적으로 DB의 정책을 변경한 후에 호출됩니다, 예를 들어 Enforcer.SavePolicy(), Enforcer.AddPolicy(), Enforcer.RemovePolicy() 등.
Close()Close는 watcher를 중지하고 해제하며, 콜백 함수는 더 이상 호출되지 않습니다.
UpdateForAddPolicy(sec, ptype string, params ...string) errorUpdateForAddPolicy는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. 정책이 Enforcer.AddPolicy(), Enforcer.AddNamedPolicy(), Enforcer.AddGroupingPolicy() 및 Enforcer.AddNamedGroupingPolicy()를 통해 추가된 후에 호출됩니다.
UpdateForRemovePolicy(sec, ptype string, params ...string) errorUpdateForRemovePolicy는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. 정책이 Enforcer.RemovePolicy(), Enforcer.RemoveNamedPolicy(), Enforcer.RemoveGroupingPolicy() 및 Enforcer.RemoveNamedGroupingPolicy()에 의해 제거된 후에 호출됩니다.
UpdateForRemoveFilteredPolicy(sec, ptype string, fieldIndex int, fieldValues ...string) errorUpdateForRemoveFilteredPolicy는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. Enforcer.RemoveFilteredPolicy(), Enforcer.RemoveFilteredNamedPolicy(), Enforcer.RemoveFilteredGroupingPolicy() 및 Enforcer.RemoveFilteredNamedGroupingPolicy() 이후에 호출됩니다.
UpdateForSavePolicy(model model.Model) errorUpdateForSavePolicy는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. Enforcer.SavePolicy() 이후에 호출됩니다.
UpdateForAddPolicies(sec string, ptype string, rules ...[]string) errorUpdateForAddPolicies는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. Enforcer.AddPolicies(), Enforcer.AddNamedPolicies(), Enforcer.AddGroupingPolicies() 및 Enforcer.AddNamedGroupingPolicies() 이후에 호출됩니다.
UpdateForRemovePolicies(sec string, ptype string, rules ...[]string) errorUpdateForRemovePolicies는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. Enforcer.RemovePolicies(), Enforcer.RemoveNamedPolicies(), Enforcer.RemoveGroupingPolicies() 및 Enforcer.RemoveNamedGroupingPolicies() 이후에 호출됩니다.