Watchers
Watchers поддерживают синхронизацию политик между несколькими экземплярами энфосеров. Когда один энфорсер обновляет политику, он уведомляет другие (через шину сообщений, такую как etcd, Redis или Kafka), и они перезагружают или обновляют свою политику в памяти. Это позволяет запускать множество энфосеров за балансировщиками нагрузки без устаревших разрешений.
Watchers реализованы в отдельных пакетах, аналогично адаптерам. Приведенный ниже список охватывает поддерживаемые бэкенды. Чтобы добавить новый, откройте issue или 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. Мы рекомендуем использовать диспетчер для достижения этой функциональности.
По сравнению с интерфейсом Watcher, WatcherEx может различать тип полученного действия обновления, например AddPolicy против RemovePolicy.
API WatcherEx:
| API | Описание |
|---|---|
| SetUpdateCallback(func(string)) error | SetUpdateCallback конфигурирует функцию обратного вызова, которую watcher вызывает, когда политика в базе данных была изменена другими экземплярами. Классический пример обратного вызова — Enforcer.LoadPolicy(). |
| Update() error | Update вызывает обратный вызов обновления у других экземпляров для синхронизации их политик. Обычно вызывается после изменения политики в базе данных, например после Enforcer.SavePolicy(), Enforcer.AddPolicy(), Enforcer.RemovePolicy() и т. д. |
| Close() | Останавливает и освобождает наблюдателя. После этого вызываемая функция (callback) больше не будет срабатывать. |
| UpdateForAddPolicy(sec, ptype string, params ...string) error | Вызывает колбэк обновления у других экземпляров для синхронизации их политик. Вызывается после добавления политики через Enforcer.AddPolicy(), Enforcer.AddNamedPolicy(), Enforcer.AddGroupingPolicy() и Enforcer.AddNamedGroupingPolicy(). |
| UpdateForRemovePolicy(sec, ptype string, params ...string) error | Вызывает колбэк обновления у других экземпляров для синхронизации их политик. Вызывается после удаления политики через Enforcer.RemovePolicy(), Enforcer.RemoveNamedPolicy(), Enforcer.RemoveGroupingPolicy() и Enforcer.RemoveNamedGroupingPolicy(). |
| UpdateForRemoveFilteredPolicy(sec, ptype string, fieldIndex int, fieldValues ...string) error | Вызывает колбэк обновления у других экземпляров для синхронизации их политик. Вызывается после Enforcer.RemoveFilteredPolicy(), Enforcer.RemoveFilteredNamedPolicy(), Enforcer.RemoveFilteredGroupingPolicy() и Enforcer.RemoveFilteredNamedGroupingPolicy(). |
| UpdateForSavePolicy(model model.Model) error | Вызывает колбэк обновления у других экземпляров для синхронизации их политик. Вызывается после Enforcer.SavePolicy(). |
| UpdateForAddPolicies(sec string, ptype string, rules ...[]string) error | Вызывает колбэк обновления у других экземпляров для синхронизации их политик. Вызывается после Enforcer.AddPolicies(), Enforcer.AddNamedPolicies(), Enforcer.AddGroupingPolicies() и Enforcer.AddNamedGroupingPolicies(). |
| UpdateForRemovePolicies(sec string, ptype string, rules ...[]string) error | Вызывает колбэк обновления у других экземпляров для синхронизации их политик. Вызывается после 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.