package middleware import ( "github.com/casehub/ticket-workbench/internal/model" "github.com/casehub/ticket-workbench/internal/service" "github.com/gin-gonic/gin" "gorm.io/gorm" ) func Auth(db *gorm.DB) gin.HandlerFunc { return func(c *gin.Context) { sessionID := extractSessionID(c) if sessionID == "" { c.JSON(200, map[string]interface{}{"success": false, "retcode": -1, "retinfo": "未登录"}) c.Abort() return } user := service.GetUserBySession(sessionID) if user == nil { c.JSON(200, map[string]interface{}{"success": false, "retcode": -1, "retinfo": "登录已过期"}) c.Abort() return } c.Set("userid", user.Userid) c.Set("username", user.Username) c.Set("role", user.Role) c.Set("team", user.Team) c.Next() } } func extractSessionID(c *gin.Context) string { if s := c.GetHeader("Authorization"); s != "" { return s } if s := c.GetHeader("jsessionid"); s != "" { return s } return "" } func GetCurrentUser(c *gin.Context) *model.TicketUser { userid, exists := c.Get("userid") if !exists { return nil } username, _ := c.Get("username") role, _ := c.Get("role") team, _ := c.Get("team") return &model.TicketUser{ Userid: userid.(int), Username: username.(string), Role: role.(int16), Team: team.(string), } }