Watchers
我们支持使用分布式消息系统,如etcd,来维持多个Casbin执行器实例之间的一致性。 这使我们的用户能够并发使用多个Casbin执行器来处理大量的权限检查请求。
与策略存储适配器类似,我们并未在主库中包含观察者代码。 对新的消息系统的任何支持都应作为观察者来实现。 下面提供了Casbin观察者的完整列表。 我们欢迎任何第三方为新的观察者做出贡献,请通知我们,我们会将其添加到此列表中:
- Go
- Java
- Node.js
- Python
- .NET
- Ruby
- PHP
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 |
Lettuce-Based Redis Watcher | KV store | Casbin | Watcher for Redis based on Lettuce) |
Kafka Watcher | Messaging system | Casbin | Watcher for Apache Kafka |
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 |
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 |
WatcherEx
为了支持多个实例之间的增量同步,我们提供了WatcherEx
接口。 我们希望它能在策略发生变化时通知其他实例,但目前还没有WatcherEx
的实现。 我们建议您使用调度器来实现这一点。
与Watcher
接口相比,WatcherEx
可以区分接收到的更新操作的类型,例如,AddPolicy
和RemovePolicy
。
WatcherEx Apis:
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()之后调用。 |