Etcd Watcher is the Etcd watcher for Casbin. With this library, Casbin can synchronize the policy with the database in multiple enforcer instances.
go get github.com/casbin/etcd-watcher/v2
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() }
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() }
This project is under Apache 2.0 License. See the LICENSE file for the full license text.