casbin.go 674 B

1234567891011121314151617181920212223242526272829303132
  1. package middleware
  2. import (
  3. "fmt"
  4. "github.com/casbin/casbin/v2"
  5. "github.com/gin-gonic/gin"
  6. "log"
  7. )
  8. func CasbinACL(c *gin.Context) {
  9. roleId, _ := c.Get("role_id")
  10. sub := fmt.Sprintf("%s_%d", "role", int(roleId.(float64)))
  11. obj := c.Request.RequestURI
  12. act := c.Request.Method
  13. e, err := casbin.NewEnforcer("config/model.conf", "config/policy.csv")
  14. log.Println(sub, obj, act, err)
  15. ok, err := e.Enforce(sub, obj, act)
  16. if err != nil {
  17. c.JSON(200, gin.H{
  18. "code": 403,
  19. "msg": "没有权限:" + err.Error(),
  20. })
  21. c.Abort()
  22. }
  23. if !ok {
  24. c.JSON(200, gin.H{
  25. "code": 403,
  26. "msg": fmt.Sprintf("没有权限:%s,%s,%s", sub, obj, act),
  27. })
  28. c.Abort()
  29. }
  30. }