观察者
优质
小牛编辑
138浏览
2023-12-01
我们支持使用分布式消息系统,例如 etcd 来保持多个Casbin执行器实例之间的一致性。 因此,我们的用户可以同时使用多个Casbin 执行器来处理大量的权限检查请求。
与策略存储 adapters类似,我们没有把watcher的代码放在主库中。 任何对新消息系统的支持都应该作为watcher程序来实现。 完整的Casbin watchers列表如下所示。 欢迎任何第三方对 watcher 进行新的贡献,如果有请告知我们,我将把它放在这个列表中:)
GoJavaNode.jsPython.NETRuby监视器 | 类型 | 作者 | 说明 |
---|---|---|---|
Etcd 监视器 | 键值对存储 | Casbin | etcd的监视器 |
Redis Watcher | 键值对存储 | Casbin | Redis的监视器 |
Redis 监视器 | 键值对存储 | @billcobbler | Redis的监视器 |
TiKV 监视器 | 键值对存储 | Casbin | TiKV 的监视器 |
Kafka 监视器 | 消息传递系统。 | @wgarunap | Apache Kafka的监视器 |
NATS 监视器 | 消息传递系统。 | Soluto | NATS的监视器 |
ZooKeeper 监视器 | 消息传递系统。 | Grepsr | Apache ZooKeeper的监视器 |
NATS, RabbitMQ, GCP Pub/Sub, AWS SNS & SQS, Kafka, InMemory | 消息传递系统。 | @rusenask | 基于Go Cloud Dev Kit与领先的云供应商和自托管基础设施运作的监视器 |
RocketMQ 观察器 | 消息传递系统。 | @fmyxyz | Apache RocketMQ的监视器 |
监视器 | 类型 | 作者 | 说明 |
---|---|---|---|
Etcd 适配器 | KV store | @mapleafgo | etcd的监视器 |
Redis 监视器 | 键值对存储 | Casbin | Redis的监视器 |
监视器 | 类型 | 作者 | 说明 |
---|---|---|---|
Etcd Watcher | KV store | Casbin | etcd的监视器 |
Redis Watcher | KV store | Casbin | Redis的监视器 |
Pub/Sub Watcher | Messaging system | Casbin | Google Cloud Pub/Sub的监视器 |
Postgres Watcher | 数据库 | Matteo Collina | PostgreSQL的监视器 |
监视器 | 类型 | 作者 | 说明 |
---|---|---|---|
Redis 监视器 | KV store | ScienceLogic | Redis的监视器 |
PostgreSQL Watcher | 数据库 | Casbin | PostgreSQL的监视器 |
监视器 | 类型 | 作者 | 说明 |
---|---|---|---|
Redis Watcher | KV store | @Sbou | Redis的Watcher |
监视器 | 类型 | 作者 | 描述 |
---|---|---|---|
Redis 监视器 | 键值对存储 | CasbinRuby | etcd的监视器 |
RabbitMQ 监视器 | 消息传递系统。 | CasbinRuby | RabbitMQ 的监视器 |
WatcherEx
为了支持多个实例之间的增量同步,我们提供 WatcherEx
接口。 我们希望它能够在策略改变时通知其他实例,但目前尚未实现 WatcherEx
。 我们推荐您使用调度器来实现它。
与 Watcher
接口相比,实现的WatcherEx
可以区分执行的是什么样的更新操作如 AddPolicy
, RemovePolicy
等等。
WatcherEx 的调用接口:
api | 描述 |
---|---|
SetUpdateCallback(func(string)) error | 当数据库中的策略已被其他实例更改时SetUpdateCallback会设置监视器将调用的回调函数。 一种典型的回调是Enforcer.LoadPolicy()。 |
Update() error | Update调用其他实例的更新回调以同步他们的策略。 它通常是在改变数据库中的策略之后进行的,如Enforcer.SavePolicy(), Enforcer.AddPolicy(), Enforcer.RemovePolicy()等。 |
Close() | Close停止并释放监视器,回调函数将不再被调用。 |
UpdateForAddPolicy(params ...string) error | UpdateForAddPolicy 调用其他实例的更新回调来同步他们的策略。 它在 Enforcer.AddPolicy()被调用后调用 |
UpdateForRemovePolicy(params ...string) error | UPdateForRemovePolicy 调用其他实例的更新回调来同步他们的策略。 它在 Enforcer.RemovePolicy()被调用后调用 |
UpdateForRemoveFilteredPolicy(fieldIndex int, fieldValues ...string) error | UpdateForRemoveFilteredPolicy 调用其他实例的更新回调以同步其策略。 它在 Enforccer.RemoveFilteredNamedGroupingPolicy()被调用后调用 |
UpdateForSavePolicy(model model.Model) error | UpdateForSavePolicy 调用其他实例的更新回调来同步他们的策略。 它在 Enforccer.RemoveFilteredNamedGroupingPolicy()被调用后调用 |