rbac.go 904 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package middleware
  2. import (
  3. "git.wanbits.cc/sin/flytalk/models"
  4. "github.com/gin-gonic/gin"
  5. "strings"
  6. )
  7. func RbacAuth(c *gin.Context) {
  8. roleId, _ := c.Get("role_id")
  9. role := models.FindRole(roleId)
  10. var methodFlag bool
  11. rPaths := strings.Split(c.Request.RequestURI, "?")
  12. if role.Method != "*" {
  13. methods := strings.Split(role.Method, ",")
  14. for _, m := range methods {
  15. if c.Request.Method == m {
  16. methodFlag = true
  17. break
  18. }
  19. }
  20. if !methodFlag {
  21. c.JSON(200, gin.H{
  22. "code": 403,
  23. "msg": "没有权限:" + c.Request.Method + "," + rPaths[0],
  24. })
  25. c.Abort()
  26. return
  27. }
  28. }
  29. var flag bool
  30. if role.Path != "*" {
  31. paths := strings.Split(role.Path, ",")
  32. for _, p := range paths {
  33. if rPaths[0] == p {
  34. flag = true
  35. break
  36. }
  37. }
  38. if !flag {
  39. c.JSON(200, gin.H{
  40. "code": 403,
  41. "msg": "没有权限:" + rPaths[0],
  42. })
  43. c.Abort()
  44. return
  45. }
  46. }
  47. }