auth.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package middleware
  2. import (
  3. "github.com/gogf/gf/v2/frame/g"
  4. "github.com/gogf/gf/v2/net/ghttp"
  5. "github.com/gogf/gf/v2/os/glog"
  6. "github.com/gogf/gf/v2/util/gconv"
  7. "nodeMonitor/internal/base"
  8. "nodeMonitor/internal/model"
  9. "nodeMonitor/library/libResponse"
  10. )
  11. type IMiddleware interface {
  12. CORS(r *ghttp.Request)
  13. Ctx(r *ghttp.Request)
  14. Auth(r *ghttp.Request)
  15. }
  16. type middlewareImpl struct{}
  17. var middlewareService = middlewareImpl{}
  18. func Middleware() IMiddleware {
  19. return IMiddleware(&middlewareImpl{})
  20. }
  21. func (s *middlewareImpl) CORS(r *ghttp.Request) {
  22. corsOptions := r.Response.DefaultCORSOptions()
  23. // you can set options
  24. //corsOptions.AllowDomain = []string{"goframe.org", "baidu.com"}
  25. r.Response.CORS(corsOptions)
  26. r.Middleware.Next()
  27. }
  28. // Ctx 自定义上下文对象
  29. func (s *middlewareImpl) Ctx(r *ghttp.Request) {
  30. ctx := r.GetCtx()
  31. //url := gstr.TrimLeft(r.Request.URL.Path, "/")
  32. //if !gstr.Contains(url, "/api/v1/node/add") {
  33. // // 执行下一步请求逻辑
  34. // r.Middleware.Next()
  35. //}
  36. //r.Request.URL.Path
  37. // 初始化登录用户信息
  38. data, err := base.GfToken().ParseToken(r)
  39. if err != nil {
  40. // 执行下一步请求逻辑
  41. g.Log().Error(ctx, err)
  42. libResponse.FailJson(true, r, err.Error())
  43. r.Middleware.Next()
  44. }
  45. if data != nil {
  46. context := new(model.Context)
  47. err = gconv.Struct(data.Data, &context.User)
  48. if err != nil {
  49. g.Log().Error(ctx, err)
  50. // 执行下一步请求逻辑
  51. r.Middleware.Next()
  52. }
  53. base.Context().Init(r, context)
  54. }
  55. // 执行下一步请求逻辑
  56. r.Middleware.Next()
  57. }
  58. // Auth 权限判断处理中间件
  59. func (s *middlewareImpl) Auth(r *ghttp.Request) {
  60. ctx := r.GetCtx()
  61. rootUsername, err := g.Cfg().Get(ctx, "node.rootUsername")
  62. if err != nil {
  63. glog.Debug(ctx, err.Error())
  64. r.Middleware.Next()
  65. return
  66. }
  67. //rootPassword, err := g.Cfg().Get(ctx, "node.rootPassword")
  68. //if err != nil {
  69. // glog.Debug(ctx, err.Error())
  70. // r.Middleware.Next()
  71. // return
  72. //}
  73. //获取登陆用户id
  74. user := base.Context().GetLoginUser(ctx)
  75. if user.UserUserName != rootUsername.String() {
  76. libResponse.FailJson(true, r, "没有访问权限")
  77. }
  78. //accessParams := r.Get("accessParams").Strings()
  79. //accessParamsStr := ""
  80. //if len(accessParams) > 0 && accessParams[0] != "undefined" {
  81. // accessParamsStr = "?" + gstr.Join(accessParams, "&")
  82. //}
  83. //url := gstr.TrimLeft(r.Request.URL.Path, "/") + accessParamsStr
  84. /*if r.Method != "GET" && adminId != 1 && !gstr.Contains(url, "api/v1/system/login") {
  85. libResponse.FailJson(true, r, "对不起!演示系统,不能删改数据!")
  86. }*/
  87. //获取无需验证权限的用户id
  88. //tagSuperAdmin := false
  89. //service.User().NotCheckAuthUserIds(ctx).Iterator(func(v interface{}) bool {
  90. // if gconv.Uint64(v) == adminId {
  91. // tagSuperAdmin = true
  92. // return false
  93. // }
  94. // return true
  95. //})
  96. //if tagSuperAdmin {
  97. // r.Middleware.Next()
  98. // //不要再往后面执行
  99. // return
  100. //}
  101. //获取地址对应的菜单id
  102. //menuList, err := service.AuthRule().GetIsMenuList(ctx)
  103. //if err != nil {
  104. // g.Log().Error(ctx, err)
  105. // libResponse.FailJson(true, r, "请求数据失败")
  106. //}
  107. //var menu *model.SysAuthRuleInfoRes
  108. //for _, m := range menuList {
  109. // ms := gstr.SubStr(m.Name, 0, gstr.Pos(m.Name, "?"))
  110. // if m.Name == url || ms == url {
  111. // menu = m
  112. // break
  113. // }
  114. //}
  115. ////只验证存在数据库中的规则
  116. //if menu != nil {
  117. // //若存在不需要验证的条件则跳过
  118. // if gstr.Equal(menu.Condition, "nocheck") {
  119. // r.Middleware.Next()
  120. // return
  121. // }
  122. // menuId := menu.Id
  123. // //菜单没存数据库不验证权限
  124. // if menuId != 0 {
  125. // //判断权限操作
  126. // enforcer, err := service.CasbinEnforcer(ctx)
  127. // if err != nil {
  128. // g.Log().Error(ctx, err)
  129. // libResponse.FailJson(true, r, "获取权限失败")
  130. // }
  131. // groupPolicy := enforcer.GetFilteredGroupingPolicy(0,
  132. // gconv.String(adminId))
  133. // if len(groupPolicy) == 0 {
  134. // libResponse.FailJson(true, r, "没有访问权限")
  135. // }
  136. // hasAccess := false
  137. // for _, v := range groupPolicy {
  138. // if enforcer.HasPolicy(v[1], gconv.String(menuId), "All") {
  139. // hasAccess = true
  140. // break
  141. // }
  142. // }
  143. // if !hasAccess {
  144. // libResponse.FailJson(true, r, "没有访问权限")
  145. // }
  146. // }
  147. //} else if menu == nil && accessParamsStr != "" {
  148. // libResponse.FailJson(true, r, "没有访问权限")
  149. //}
  150. r.Middleware.Next()
  151. }