Pular para o conteúdo principal

Watchers

Nós apoiamos o uso de sistemas de mensagens distribuídas como etcd para manter a consistência entre múltiplas instâncias do Casbin enforcer. Isto permite que nossos usuários usem simultaneamente múltiplos enforcers do Casbin para lidar com um grande número de solicitações de verificação de permissões.

Semelhante aos adaptadores de armazenamento de políticas, nós não incluímos o código do watcher na biblioteca principal. Qualquer suporte para um novo sistema de mensagens deve ser implementado como um watcher. Uma lista completa dos watchers do Casbin é fornecida abaixo. Nós damos as boas-vindas a qualquer contribuição de terceiros para um novo watcher, por favor nos informe e nós o adicionaremos a esta lista:

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

Para apoiar a sincronização incremental entre múltiplas instâncias, nós fornecemos a interface WatcherEx. Esperamos que ela possa notificar outras instâncias quando a política mudar, mas atualmente não há implementação do WatcherEx. Nós recomendamos que você use o dispatcher para alcançar isso.

Comparado com a interface Watcher, WatcherEx pode distinguir que tipo de ação de atualização é recebida, por exemplo, AddPolicy e RemovePolicy.

Apis do WatcherEx:

APIDescrição
SetUpdateCallback(func(string)) errorSetUpdateCallback define a função de callback que o watcher chamará, quando a política no DB for alterada por outras instâncias. Um callback clássico é Enforcer.LoadPolicy().
Update() errorUpdate chama o callback de atualização de outras instâncias para sincronizar sua política. É geralmente chamado após mudar a política no DB, como Enforcer.SavePolicy(), Enforcer.AddPolicy(), Enforcer.RemovePolicy(), etc.
Close()Close para e libera o watcher, a função de callback não será mais chamada.
UpdateForAddPolicy(sec, ptype string, params ...string) errorUpdateForAddPolicy chama o callback de atualização de outras instâncias para sincronizar sua política. É chamado após uma política ser adicionada via Enforcer.AddPolicy(), Enforcer.AddNamedPolicy(), Enforcer.AddGroupingPolicy() e Enforcer.AddNamedGroupingPolicy().
UpdateForRemovePolicy(sec, ptype string, params ...string) errorUpdateForRemovePolicy chama o callback de atualização de outras instâncias para sincronizar sua política. É chamado após uma política ser removida por Enforcer.RemovePolicy(), Enforcer.RemoveNamedPolicy(), Enforcer.RemoveGroupingPolicy() e Enforcer.RemoveNamedGroupingPolicy().
UpdateForRemoveFilteredPolicy(sec, ptype string, fieldIndex int, fieldValues ...string) errorUpdateForRemoveFilteredPolicy chama o callback de atualização de outras instâncias para sincronizar sua política. É chamado após Enforcer.RemoveFilteredPolicy(), Enforcer.RemoveFilteredNamedPolicy(), Enforcer.RemoveFilteredGroupingPolicy() e Enforcer.RemoveFilteredNamedGroupingPolicy().
UpdateForSavePolicy(model model.Model) errorUpdateForSavePolicy chama o callback de atualização de outras instâncias para sincronizar sua política. É chamado após Enforcer.SavePolicy()
UpdateForAddPolicies(sec string, ptype string, rules ...[]string) errorUpdateForAddPolicies chama o callback de atualização de outras instâncias para sincronizar sua política. É chamado após Enforcer.AddPolicies(), Enforcer.AddNamedPolicies(), Enforcer.AddGroupingPolicies() e Enforcer.AddNamedGroupingPolicies().
UpdateForRemovePolicies(sec string, ptype string, rules ...[]string) errorUpdateForRemovePolicies chama o callback de atualização de outras instâncias para sincronizar sua política. É chamado após Enforcer.RemovePolicies(), Enforcer.RemoveNamedPolicies(), Enforcer.RemoveGroupingPolicies() e Enforcer.RemoveNamedGroupingPolicies().