casbin_rbac.go 978 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package my_middleware
  2. import (
  3. "dy-admin/internal/pcmserver/pkg/code"
  4. "dy-admin/internal/pcmserver/sys/service"
  5. "dy-admin/pkg/jwt"
  6. "dy-admin/pkg/rescode"
  7. "fmt"
  8. "github.com/gin-gonic/gin"
  9. "strconv"
  10. )
  11. var casbinService = service.ServicesGroupApp.CasbinService
  12. func CasbinHandler(j *jwt.JWT) gin.HandlerFunc {
  13. return func(c *gin.Context) {
  14. roleIds := j.GetUserRoleIDs(c)
  15. //获取请求的PATH
  16. obj := c.Request.URL.Path
  17. // 获取请求方法
  18. act := c.Request.Method
  19. // 获取用户的角色
  20. subs := roleIds
  21. var success bool
  22. for _, sub := range subs {
  23. substr := strconv.Itoa(sub)
  24. success, _ = casbinService.Casbin().Enforce(substr, obj, act)
  25. if success {
  26. c.Next()
  27. }
  28. }
  29. if !success {
  30. msg := fmt.Sprintf("params=>roleIds:%v,path:%s,action:%s", roleIds, obj, act)
  31. err := rescode.RegisterErrorWithMessage(nil, msg, code.ErrCodeMap[code.ErrPermissionDeniedCode])
  32. rescode.WriteErrResponse(c, err)
  33. c.Abort()
  34. return
  35. }
  36. }
  37. }