メインコンテンツにスキップ

Watchers

etcdのような分散メッセージングシステムの使用をサポートしており、複数のCasbinエンフォーサーインスタンス間で一貫性を維持します。 これにより、ユーザーは複数のCasbinエンフォーサーを同時に使用して、大量の権限チェックリクエストを処理することができます。

ポリシーストレージアダプターと同様に、メインライブラリにウォッチャーコードは含まれていません。 新しいメッセージングシステムのサポートは、ウォッチャーとして実装する必要があります。 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は受信した更新アクションのタイプを区別することができます。例えば、AddPolicyRemovePolicyなどです。

WatcherEx Apis:

API説明
SetUpdateCallback(func(string)) errorSetUpdateCallbackは、他のインスタンスによってDBのポリシーが変更されたときにウォッチャーが呼び出すコールバック関数を設定します。 典型的なコールバックはEnforcer.LoadPolicy()です。
Update() errorUpdateは他のインスタンスの更新コールバックを呼び出してポリシーを同期します。 通常、DBのポリシーを変更した後に呼び出されます。例えば、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()の後に呼び出されます。