auth.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package middleware
  2. import (
  3. "github.com/gin-contrib/sessions"
  4. "github.com/gin-gonic/gin"
  5. "message-pusher/common"
  6. "net/http"
  7. )
  8. func authHelper(c *gin.Context, minRole int) {
  9. session := sessions.Default(c)
  10. username := session.Get("username")
  11. role := session.Get("role")
  12. id := session.Get("id")
  13. status := session.Get("status")
  14. if username == nil {
  15. c.JSON(http.StatusOK, gin.H{
  16. "success": false,
  17. "message": "无权进行此操作,未登录",
  18. })
  19. c.Abort()
  20. }
  21. if status.(int) == common.UserStatusDisabled {
  22. c.JSON(http.StatusOK, gin.H{
  23. "success": false,
  24. "message": "用户已被封禁",
  25. })
  26. c.Abort()
  27. return
  28. }
  29. if role.(int) < minRole {
  30. c.JSON(http.StatusOK, gin.H{
  31. "success": false,
  32. "message": "无权进行此操作,权限不足",
  33. })
  34. c.Abort()
  35. return
  36. }
  37. c.Set("username", username)
  38. c.Set("role", role)
  39. c.Set("id", id)
  40. c.Next()
  41. }
  42. func UserAuth() func(c *gin.Context) {
  43. return func(c *gin.Context) {
  44. authHelper(c, common.RoleCommonUser)
  45. }
  46. }
  47. func AdminAuth() func(c *gin.Context) {
  48. return func(c *gin.Context) {
  49. authHelper(c, common.RoleAdminUser)
  50. }
  51. }
  52. func RootAuth() func(c *gin.Context) {
  53. return func(c *gin.Context) {
  54. authHelper(c, common.RoleRootUser)
  55. }
  56. }