go-casbin-redis
Redis-DB adapter for Casbin
Installation
go get github.com/VadimSokow/go-casbin-redis
Simple Example
package main
import (
"github.com/VadimSokow/go-casbin-redis/recas"
"github.com/casbin/casbin/v2"
"log"
)
func example() {
//Init the redis-casbin Controller
rc, err := recas.NewReCasController(recas.ConnectionSettings{
//The Network Protocol (use tcp)
Network: "tcp",
//Address to Redis-DB server
Addr: "123.123.123.123:6379",
//Optional add Redis-DB server (only if Auth is activated)
Username: "",
//Optional add Redis-DB server (only if Auth is activated)
Password: "",
//Number of Database on Redis-DB server
DB: 0,
//Set true --> casbin adapter isn't allowed to save data
ReadOnly: false,
})
if err != nil {
log.Fatalln(err)
}
//set filter for getting Model and User
filter := recas.Filter{
UserId: "user_42eab92cd7f2a6e8",
ModelId: "model_97db17e0254bd73b",
}
//get casbin adapter for redis
a := rc.GetAdapter()
//download all models from DB
models, err := rc.Api.GetModels()
if err != nil {
log.Fatalln(err)
}
//getting Model with ID
model, err := models.GetModelById(filter.ModelId)
if err != nil {
log.Fatalln(err)
}
//build casbin-model
casbinModel, err := model.GetCasbinModel()
if err != nil {
log.Fatalln(err)
}
//set up a casbin Enforcer with the Model and the Adapter
e, err := casbin.NewEnforcer(casbinModel, a)
if err != nil {
log.Fatalln(err)
}
//Optional --> currently auto save is not supported!
e.EnableAutoSave(false)
//get Policy from DB with User and Model ID as filter
err = e.LoadFilteredPolicy(filter)
if err != nil {
log.Fatalln(err)
}
//enforce a policy
if ok, err := e.Enforce(filter.UserId, "data1", "read"); err != nil {
log.Fatalln(err)
} else {
log.Printf("checkup returns %t", ok)
}
}