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 |
| Watcher | Type | Author | Description |
|---|---|---|---|
| Etcd Adapter | KV store | @mapleafgo | Watcher for etcd |
| Redis Watcher | KV store | Casbin | Watcher for Redis |
| Redis WatcherEx | KV store | Casbin | WatcherEx for Redis |
| Lettuce-Based Redis Watcher | KV store | Casbin | Watcher for Redis based on Lettuce) |
| PostgreSQL Watcher | Database | Casbin | Watcher for PostgreSQL |
| Kafka Watcher | Messaging system | Casbin | Watcher for Apache Kafka |
| ZooKeeper Watcher | Messaging system | Casbin | Watcher for Apache ZooKeeper |
| RabbitMQ Watcher | Messaging system | Casbin | Watcher for RabbitMQ |
| Watcher | Type | Author | Description |
|---|---|---|---|
| Etcd Watcher | KV store | Casbin | Watcher for etcd |
| Redis Watcher | KV store | Casbin | Watcher for Redis |
| Pub/Sub Watcher | Messaging system | Casbin | Watcher for Google Cloud Pub/Sub |
| MongoDB Change Streams Watcher | Database | Casbin | Watcher for MongoDB Change Streams |
| Postgres Watcher | Database | @mcollina | Watcher for PostgreSQL |
| Watcher | Type | Author | Description |
|---|---|---|---|
| Etcd Watcher | KV store | Casbin | Watcher for etcd |
| Redis Watcher | KV store | Casbin | Watcher for Redis |
| Redis Watcher | KV store | ScienceLogic | Watcher for Redis |
| Redis Async Watcher | KV store | @kevinkelin | Watcher for Redis |
| PostgreSQL Watcher | Database | Casbin | Watcher for PostgreSQL |
| RabbitMQ Watcher | Messaging system | Casbin | Watcher for RabbitMQ |
| MongoDB Watcher | Database | @sanguinedab | Watcher for MongoDB |
| Watcher | Type | Author | Description |
|---|---|---|---|
| Redis Watcher | KV store | @Sbou | Watcher for Redis |
| Watcher | Type | Author | Description |
|---|---|---|---|
| Redis Watcher | KV store | CasbinRuby | Watcher for Redis |
| RabbitMQ Watcher | Messaging system | CasbinRuby | Watcher for RabbitMQ |
| Watcher | Type | Author | Description |
|---|---|---|---|
| Redis Watcher | KV store | @Tinywan | Watcher for Redis |
| Watcher | Type | Author | Description |
|---|---|---|---|
| Redis Watcher | KV store | Casbin | Watcher for Redis |
WatcherEx
여러 인스턴스 간의 증분 동기화를 지원하기 위해 WatcherEx 인터페이스를 제공합니다. 이 인터페이스는 정책 변경 시 다른 인스턴스에 알릴 수 있지만, 현재 WatcherEx의 구현체는 없습니다. 이 기능을 달성하기 위해 디스패처(dispatcher) 사용을 권장합니다.
Watcher 인터페이스와 비교하여 WatcherEx는 수신된 업데이트 작업의 유형(AddPolicy 대 RemovePolicy 등)을 구별할 수 있습니다.
WatcherEx API:
| API | 설명 |
|---|---|
| SetUpdateCallback(func(string)) error | SetUpdateCallback은 다른 인스턴스에 의해 데이터베이스의 정책이 변경되었을 때 워처가 호출하는 콜백 함수를 설정합니다. 대표적인 콜백은 Enforcer.LoadPolicy()입니다. |
| Update() error | Update는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. 일반적으로 데이터베이스에서 정책을 변경한 후(예: Enforcer.SavePolicy(), Enforcer.AddPolicy(), Enforcer.RemovePolicy() 등 이후) 호출됩니다. |
| Close() | Close는 워처를 중지하고 릴리스합니다. 이 메서드 호출 후에는 콜백 함수가 더 이상 실행되지 않습니다. |
| UpdateForAddPolicy(sec, ptype string, params ...string) error | UpdateForAddPolicy는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. Enforcer.AddPolicy(), Enforcer.AddNamedPolicy(), Enforcer.AddGroupingPolicy() 및 Enforcer.AddNamedGroupingPolicy()를 통해 정책이 추가된 후 호출됩니다. |
| UpdateForRemovePolicy(sec, ptype string, params ...string) error | UpdateForRemovePolicy는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. Enforcer.RemovePolicy(), Enforcer.RemoveNamedPolicy(), Enforcer.RemoveGroupingPolicy() 및 Enforcer.RemoveNamedGroupingPolicy()에 의해 정책이 제거된 후 호출됩니다. |
| UpdateForRemoveFilteredPolicy(sec, ptype string, fieldIndex int, fieldValues ...string) error | UpdateForRemoveFilteredPolicy는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. Enforcer.RemoveFilteredPolicy(), Enforcer.RemoveFilteredNamedPolicy(), Enforcer.RemoveFilteredGroupingPolicy() 및 Enforcer.RemoveFilteredNamedGroupingPolicy() 이후에 호출됩니다. |
| UpdateForSavePolicy(model model.Model) error | UpdateForSavePolicy는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. Enforcer.SavePolicy() 이후에 호출됩니다. |
| UpdateForAddPolicies(sec string, ptype string, rules ...[]string) error | UpdateForAddPolicies는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. Enforcer.AddPolicies(), Enforcer.AddNamedPolicies(), Enforcer.AddGroupingPolicies() 및 Enforcer.AddNamedGroupingPolicies() 이후에 호출됩니다. |
| UpdateForRemovePolicies(sec string, ptype string, rules ...[]string) error | UpdateForRemovePolicies는 다른 인스턴스의 업데이트 콜백을 호출하여 정책을 동기화합니다. 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.