package middleware

import (
	"fmt"
	"github.com/casbin/casbin/v2"
	"github.com/gin-gonic/gin"
	"log"
)

func CasbinACL(c *gin.Context) {
	roleId, _ := c.Get("role_id")
	sub := fmt.Sprintf("%s_%d", "role", int(roleId.(float64)))
	obj := c.Request.RequestURI
	act := c.Request.Method
	e, err := casbin.NewEnforcer("config/model.conf", "config/policy.csv")
	log.Println(sub, obj, act, err)
	ok, err := e.Enforce(sub, obj, act)
	if err != nil {
		c.JSON(200, gin.H{
			"code": 403,
			"msg":  "没有权限:" + err.Error(),
		})
		c.Abort()
	}
	if !ok {
		c.JSON(200, gin.H{
			"code": 403,
			"msg":  fmt.Sprintf("没有权限:%s,%s,%s", sub, obj, act),
		})
		c.Abort()
	}
}
