middleware.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. //获取登陆用户id
  26. adminId := user_service.GetLoginID(r)
  27. //获取无需验证权限的用户id
  28. for _, v := range service.NotCheckAuthAdminIds {
  29. if gconv.Uint64(v) == adminId {
  30. r.Middleware.Next()
  31. return
  32. }
  33. }
  34. url := gstr.TrimLeft(r.Request.URL.Path, "/")
  35. //获取地址对应的菜单id
  36. menuList, err := auth_service.GetMenuIsStatusList()
  37. if err != nil {
  38. g.Log().Error(err)
  39. response.FailJson(true, r, "请求数据失败")
  40. }
  41. var menu *auth_rule.Entity
  42. for _, m := range menuList {
  43. if gstr.Equal(m.Name, url) {
  44. menu = m
  45. break
  46. }
  47. }
  48. //只验证存在数据库中的规则
  49. if menu != nil {
  50. //若存在不需要验证的条件则跳过
  51. if gstr.Equal(menu.Condition, "nocheck") {
  52. r.Middleware.Next()
  53. return
  54. }
  55. menuId := menu.Id
  56. //菜单没存数据库不验证权限
  57. if menuId != 0 {
  58. //判断权限操作
  59. enforcer, err := casbin_adapter_service.GetEnforcer()
  60. if err != nil {
  61. g.Log().Error(err)
  62. response.FailJson(true, r, "获取权限失败")
  63. }
  64. groupPolicy := enforcer.GetFilteredGroupingPolicy(0,
  65. fmt.Sprintf("u_%d", adminId))
  66. if len(groupPolicy) == 0 {
  67. response.FailJson(true, r, "没有访问权限")
  68. }
  69. hasAccess := false
  70. for _, v := range groupPolicy {
  71. if enforcer.HasPolicy(v[1], fmt.Sprintf("r_%d", menuId), "All") {
  72. hasAccess = true
  73. break
  74. }
  75. }
  76. if !hasAccess {
  77. response.FailJson(true, r, "没有访问权限")
  78. }
  79. }
  80. }
  81. r.Middleware.Next()
  82. }