casbin_rbac.go 864 B

123456789101112131415161718192021222324252627282930313233
  1. package middleware
  2. import (
  3. "strconv"
  4. "strings"
  5. "github.com/flipped-aurora/gin-vue-admin/server/global"
  6. "github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
  7. "github.com/flipped-aurora/gin-vue-admin/server/utils"
  8. "github.com/gin-gonic/gin"
  9. )
  10. // CasbinHandler 拦截器
  11. func CasbinHandler() gin.HandlerFunc {
  12. return func(c *gin.Context) {
  13. waitUse, _ := utils.GetClaims(c)
  14. //获取请求的PATH
  15. path := c.Request.URL.Path
  16. obj := strings.TrimPrefix(path, global.GVA_CONFIG.System.RouterPrefix)
  17. // 获取请求方法
  18. act := c.Request.Method
  19. // 获取用户的角色
  20. sub := strconv.Itoa(int(waitUse.AuthorityId))
  21. e := utils.GetCasbin() // 判断策略中是否存在
  22. success, _ := e.Enforce(sub, obj, act)
  23. if !success {
  24. response.FailWithDetailed(gin.H{}, "权限不足", c)
  25. c.Abort()
  26. return
  27. }
  28. c.Next()
  29. }
  30. }