go-casbin-redis

module
v0.1.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 14, 2022 License: Apache-2.0

README

go-casbin-redis

Go 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)
	}
}

Directories

Path Synopsis
test

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL