middleware.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package router
  2. import (
  3. "fmt"
  4. "gfast/app/model/auth_rule"
  5. "gfast/app/service/casbin_adapter_service"
  6. "gfast/app/service/user_service"
  7. "gfast/library/response"
  8. "gfast/library/utils"
  9. "github.com/gogf/gf/encoding/gurl"
  10. "github.com/gogf/gf/frame/g"
  11. "github.com/gogf/gf/net/ghttp"
  12. )
  13. //跨域处理中间件
  14. func MiddlewareCORS(r *ghttp.Request) {
  15. r.Response.CORSDefault()
  16. r.Middleware.Next()
  17. }
  18. //权限判断处理中间件
  19. func MiddlewareAuth(r *ghttp.Request) {
  20. //获取登陆用户id
  21. adminId := user_service.GetLoginID(r)
  22. //获取无需验证权限的用户id
  23. for _, v := range utils.NotCheckAuthAdminIds {
  24. if v == adminId {
  25. r.Middleware.Next()
  26. return
  27. }
  28. }
  29. url := r.GetUrl()
  30. info, err := gurl.ParseURL(url, 32)
  31. if err != nil {
  32. g.Log().Error(err)
  33. response.FailJson(true, r, "请求地址错误")
  34. }
  35. //获取地址对应的菜单id
  36. gValue, err := auth_rule.Model.Where("name=?", info["path"]).Fields("id").Value()
  37. if err != nil {
  38. g.Log().Error(err)
  39. response.FailJson(true, r, "请求数据失败")
  40. }
  41. menuId := gValue.Int()
  42. //菜单没存数据库不验证权限
  43. if menuId != 0 {
  44. //判断权限操作
  45. enforcer, err := casbin_adapter_service.GetEnforcer()
  46. if err != nil {
  47. g.Log().Error(err)
  48. response.FailJson(true, r, "获取权限失败")
  49. }
  50. groupPolicy := enforcer.GetFilteredGroupingPolicy(0,
  51. fmt.Sprintf("u_%d", adminId))
  52. if len(groupPolicy) == 0 {
  53. response.FailJson(true, r, "没有访问权限")
  54. }
  55. hasAccess := false
  56. g.Log().Debug(groupPolicy)
  57. for _, v := range groupPolicy {
  58. if enforcer.HasPolicy(v[1], fmt.Sprintf("r_%d", menuId), "All") {
  59. hasAccess = true
  60. break
  61. }
  62. }
  63. if !hasAccess {
  64. response.FailJson(true, r, "没有访问权限")
  65. }
  66. }
  67. r.Middleware.Next()
  68. }