middleware.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. "github.com/gogf/gf/util/gconv"
  14. )
  15. //跨域处理中间件
  16. func CORS(r *ghttp.Request) {
  17. r.Response.CORSDefault()
  18. r.Middleware.Next()
  19. }
  20. //权限判断处理中间件
  21. func Auth(r *ghttp.Request) {
  22. /*if r.Method != "GET" {
  23. response.FailJson(true, r, "演示系统禁止操作")
  24. }*/
  25. accessParams := r.GetStrings("accessParams")
  26. accessParamsStr := ""
  27. if len(accessParams) > 0 {
  28. accessParamsStr = "?" + gstr.Join(accessParams, "&")
  29. }
  30. //获取登陆用户id
  31. adminId := user_service.GetLoginID(r)
  32. //获取无需验证权限的用户id
  33. for _, v := range service.NotCheckAuthAdminIds {
  34. if gconv.Uint64(v) == adminId {
  35. r.Middleware.Next()
  36. return
  37. }
  38. }
  39. url := gstr.TrimLeft(r.Request.URL.Path, "/") + accessParamsStr
  40. //获取地址对应的菜单id
  41. menuList, err := auth_service.GetMenuIsStatusList()
  42. if err != nil {
  43. g.Log().Error(err)
  44. response.FailJson(true, r, "请求数据失败")
  45. }
  46. var menu *auth_rule.Entity
  47. for _, m := range menuList {
  48. if gstr.Equal(m.Name, url) {
  49. menu = m
  50. break
  51. }
  52. }
  53. //只验证存在数据库中的规则
  54. if menu != nil {
  55. //若存在不需要验证的条件则跳过
  56. if gstr.Equal(menu.Condition, "nocheck") {
  57. r.Middleware.Next()
  58. return
  59. }
  60. menuId := menu.Id
  61. //菜单没存数据库不验证权限
  62. if menuId != 0 {
  63. //判断权限操作
  64. enforcer, err := casbin_adapter_service.GetEnforcer()
  65. if err != nil {
  66. g.Log().Error(err)
  67. response.FailJson(true, r, "获取权限失败")
  68. }
  69. groupPolicy := enforcer.GetFilteredGroupingPolicy(0,
  70. fmt.Sprintf("u_%d", adminId))
  71. if len(groupPolicy) == 0 {
  72. response.FailJson(true, r, "没有访问权限")
  73. }
  74. hasAccess := false
  75. for _, v := range groupPolicy {
  76. if enforcer.HasPolicy(v[1], fmt.Sprintf("r_%d", menuId), "All") {
  77. hasAccess = true
  78. break
  79. }
  80. }
  81. if !hasAccess {
  82. response.FailJson(true, r, "没有访问权限")
  83. }
  84. }
  85. } else if menu == nil && accessParamsStr != "" {
  86. response.FailJson(true, r, "没有访问权限")
  87. }
  88. r.Middleware.Next()
  89. }