You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-fly/middleware/casbin.go

33 lines
674 B

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