Перейти к основному контенту

Watchers

Мы поддерживаем использование распределенных систем обмена сообщениями, таких как etcd, для поддержания согласованности между несколькими экземплярами Casbin enforcer. Это позволяет нашим пользователям одновременно использовать несколько Casbin enforcers для обработки большого количества запросов на проверку разрешений.

Аналогично адаптерам хранения политик, мы не включаем код наблюдателя в основную библиотеку. Любая поддержка новой системы обмена сообщениями должна быть реализована в качестве наблюдателя. Ниже представлен полный список наблюдателей Casbin. Мы приветствуем любые вклады от третьих сторон для нового наблюдателя, пожалуйста, сообщите нам, и мы добавим его в этот список:

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, WatcherEx может различать, какой тип обновления получен, например, AddPolicy и RemovePolicy.

API WatcherEx:

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().