跳转至主要内容

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设置观察者在策略在数据库中被其他实例更改时将调用的回调函数。 一个典型的回调是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()之后调用。