Etcd Watcher
Etcd Watcher is the Etcd watcher for Casbin. With this library, Casbin can synchronize the policy with the database in multiple enforcer instances.
Installation
go get github.com/casbin/etcd-watcher/v2
Simple Example
package main
import (
"log"
casbin "github.com/casbin/casbin/v2"
etcdwatcher "github.com/casbin/etcd-watcher/v2"
)
func updateCallback(rev string) {
log.Println("New revision detected:", rev)
}
func main() {
// Initialize the watcher.
// Use the endpoint of etcd cluster as parameter.
w, _ := etcdwatcher.NewWatcher([]string{"http://127.0.0.1:2379"}, "keyname")
// Initialize the enforcer.
e, _ := casbin.NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
// Set the watcher for the enforcer.
e.SetWatcher(w)
// By default, the watcher's callback is automatically set to the
// enforcer's LoadPolicy() in the SetWatcher() call.
// We can change it by explicitly setting a callback.
w.SetUpdateCallback(updateCallback)
// Update the policy to test the effect.
// You should see "[New revision detected: X]" in the log.
e.SavePolicy()
}
Simple Example(Configuration Mode)
package main
import (
"log"
casbin "github.com/casbin/casbin/v2"
etcdwatcher "github.com/casbin/etcd-watcher/v2"
)
func updateCallback(rev string) {
log.Println("New revision detected:", rev)
}
func main() {
// Initialize the watcher.
// Use the configuration file as the parameter
w, _ := etcdwatcher.NewWatcherWithConfig(etcdwatcher.WatcherConfig{
Hosts: []string{"http://127.0.0.1:2379"},
Key: "/casbin",
User: "root",
Pass: "123",
})
// Initialize the enforcer.
e, _ := casbin.NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
// Set the watcher for the enforcer.
e.SetWatcher(w)
// By default, the watcher's callback is automatically set to the
// enforcer's LoadPolicy() in the SetWatcher() call.
// We can change it by explicitly setting a callback.
w.SetUpdateCallback(updateCallback)
// Update the policy to test the effect.
// You should see "[New revision detected: X]" in the log.
e.SavePolicy()
}
Getting Help
License
This project is under Apache 2.0 License. See the LICENSE file for the full license text.