Redis Watcher is a Redis watcher for Casbin.
go get github.com/casbin/redis-watcher/v2
package main
import (
"log"
"github.com/casbin/casbin/v2"
rediswatcher "github.com/casbin/redis-watcher/v2"
"github.com/go-redis/redis/v8"
)
func updateCallback(msg string) {
log.Println(msg)
}
func main() {
// Initialize the watcher.
// Use the Redis host as parameter.
w, _ := rediswatcher.NewWatcher("localhost:6379", rediswatcher.WatcherOptions{
Options: redis.Options{
Network: "tcp",
Password: "",
},
Channel: "/casbin",
// Only exists in test, generally be true
IgnoreSelf: false,
})
// Or initialize the watcher in redis cluster.
// w, _ := rediswatcher.NewWatcherWithCluster("localhost:6379,localhost:6379,localhost:6379", rediswatcher.WatcherOptions{
// ClusterOptions: redis.ClusterOptions{
// Password: "",
// },
// Channel: "/casbin",
// IgnoreSelf: false,
// })
// Initialize the enforcer.
e, _ := casbin.NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
// Set the watcher for the enforcer.
_ = e.SetWatcher(w)
// Set callback to local example
_ = w.SetUpdateCallback(updateCallback)
// Or use the default callback
// _ = w.SetUpdateCallback(rediswatcher.DefaultUpdateCallback(e))
// Update the policy to test the effect.
// You should see "[casbin rules updated]" in the log.
_ = e.SavePolicy()
// Only exists in test
fmt.Scanln()
}
This project is under Apache 2.0 License. See the LICENSE file for the full license text.