middleware.go 1.6 KB

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