middleware.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package middleWare
  2. import (
  3. "fmt"
  4. "gfast/app/model/admin/auth_rule"
  5. "gfast/app/service/admin/auth_service"
  6. "gfast/app/service/admin/user_service"
  7. "gfast/app/service/casbin_adapter_service"
  8. "gfast/library/response"
  9. "gfast/library/service"
  10. "github.com/gogf/gf/frame/g"
  11. "github.com/gogf/gf/net/ghttp"
  12. "github.com/gogf/gf/text/gstr"
  13. )
  14. //跨域处理中间件
  15. func CORS(r *ghttp.Request) {
  16. r.Response.CORSDefault()
  17. r.Middleware.Next()
  18. }
  19. //权限判断处理中间件
  20. func Auth(r *ghttp.Request) {
  21. //获取登陆用户id
  22. adminId := user_service.GetLoginID(r)
  23. //获取无需验证权限的用户id
  24. for _, v := range service.NotCheckAuthAdminIds {
  25. if v == adminId {
  26. r.Middleware.Next()
  27. return
  28. }
  29. }
  30. url := r.Request.URL
  31. //获取地址对应的菜单id
  32. menuList, err := auth_service.GetMenuIsStatusList()
  33. if err != nil {
  34. g.Log().Error(err)
  35. response.FailJson(true, r, "请求数据失败")
  36. }
  37. var menu *auth_rule.Entity
  38. for _, m := range menuList {
  39. if gstr.Equal(m.Name, url.Path) {
  40. menu = m
  41. break
  42. }
  43. }
  44. if menu == nil {
  45. response.FailJson(true, r, "没有访问权限")
  46. }
  47. //若存在不需要验证的条件则跳过
  48. if gstr.Equal(menu.Condition, "nocheck") {
  49. r.Middleware.Next()
  50. return
  51. }
  52. menuId := menu.Id
  53. //菜单没存数据库不验证权限
  54. if menuId != 0 {
  55. //判断权限操作
  56. enforcer, err := casbin_adapter_service.GetEnforcer()
  57. if err != nil {
  58. g.Log().Error(err)
  59. response.FailJson(true, r, "获取权限失败")
  60. }
  61. groupPolicy := enforcer.GetFilteredGroupingPolicy(0,
  62. fmt.Sprintf("u_%d", adminId))
  63. if len(groupPolicy) == 0 {
  64. response.FailJson(true, r, "没有访问权限")
  65. }
  66. hasAccess := false
  67. for _, v := range groupPolicy {
  68. if enforcer.HasPolicy(v[1], fmt.Sprintf("r_%d", menuId), "All") {
  69. hasAccess = true
  70. break
  71. }
  72. }
  73. if !hasAccess {
  74. response.FailJson(true, r, "没有访问权限")
  75. }
  76. }
  77. r.Middleware.Next()
  78. }