본문으로 건너뛰기

Watchers

Watchers는 여러 엔포서 인스턴스 간에 정책을 동기화합니다. 하나의 엔포서가 정책을 업데이트하면 다른 인스턴스에 알림을 보내고(etcd, Redis 또는 Kafka와 같은 메시지 버스를 통해 사용), 다른 인스턴스는 메모리 내 정책을 다시 로드하거나 업데이트합니다. 이를 통해 만료된 권한 없이 로드 밸런서 뒤에 여러 엔포서를 실행할 수 있습니다.

Watchers는 어댑터와 마찬가지로 별도의 패키지에서 구현됩니다. 아래 목록은 지원되는 백엔드를 다룹니다. 새로운 백엔드를 추가하려면 이슈나 PR을 열어주세요.

Watcher Type Author Description
PostgreSQL WatcherEx Database @IguteChung WatcherEx for PostgreSQL
Redis WatcherEx KV store Casbin WatcherEx for Redis
Redis Watcher KV store @billcobbler Watcher for Redis
Etcd Watcher KV store Casbin Watcher for etcd
TiKV Watcher KV store Casbin Watcher for TiKV
Kafka Watcher Messaging system @wgarunap Watcher for Apache Kafka
NATS Watcher Messaging system Soluto Watcher for NATS
ZooKeeper Watcher Messaging system Grepsr Watcher for Apache ZooKeeper
NATS, RabbitMQ, GCP Pub/Sub, AWS SNS & SQS, Kafka, InMemory Messaging System @rusenask Watcher 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, InMemory Messaging System @bartventer WatcherEx based on Go Cloud Dev Kit that works with leading cloud providers and self-hosted infrastructure
RocketMQ Watcher Messaging system @fmyxyz Watcher for Apache RocketMQ

WatcherEx​

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

Watcher 인터페이스와 비교하여 WatcherEx는 수신된 업데이트 작업의 유형(AddPolicy 대 RemovePolicy 등)을 구별할 수 있습니다.

WatcherEx API:

API설명
SetUpdateCallback(func(string)) errorSetUpdateCallback은 다른 인스턴스에 의해 데이터베이스의 정책이 변경되었을 때 워처가 호출하는 콜백 함수를 설정합니다. 대표적인 콜백은 Enforcer.LoadPolicy()입니다.
Update() errorUpdate는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. 일반적으로 데이터베이스에서 정책을 변경한 후(예: Enforcer.SavePolicy(), Enforcer.AddPolicy(), Enforcer.RemovePolicy() 등 이후) 호출됩니다.
Close()Close는 워처를 중지하고 릴리스합니다. 이 메서드 호출 후에는 콜백 함수가 더 이상 실행되지 않습니다.
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() 이후에 호출됩니다.

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.