// Package admin 是后台管理的 HTTP 接入层。 package admin import ( "github.com/gin-gonic/gin" "portal-mini-go/internal/middleware" "portal-mini-go/internal/pkg/errors" "portal-mini-go/internal/pkg/response" authsvc "portal-mini-go/internal/service/admin/auth" ) // Handler 后台请求处理。 type Handler struct { authSvc *authsvc.Service } func NewHandler(authSvc *authsvc.Service) *Handler { return &Handler{authSvc: authSvc} } type LoginReq struct { Username string `json:"username" binding:"required"` Password string `json:"password" binding:"required"` } // Login 后台登录:校验账号密码后签发 JWT。 func (h *Handler) Login(c *gin.Context) { var req LoginReq if err := c.ShouldBindJSON(&req); err != nil { c.Error(errors.ErrBadRequest) return } t, err := h.authSvc.Login(c.Request.Context(), authsvc.LoginReq{Username: req.Username, Password: req.Password}) if err != nil { c.Error(err) return } response.OK(c, gin.H{"token": t}) } // Info 受保护接口:返回当前管理员的角色、权限与可见菜单树。 func (h *Handler) Info(c *gin.Context) { id, ok := middleware.AdminIDUint(c) if !ok { c.Error(errors.ErrUnauthorized) return } info, err := h.authSvc.Info(c.Request.Context(), id) if err != nil { c.Error(err) return } response.OK(c, info) } // Register 注册后台鉴权后路由(当前为 /info)。g 已带 JWT 鉴权中间件。 func Register(g *gin.RouterGroup, h *Handler) { g.GET("/info", h.Info) } // RegisterLogin 注册公开登录接口(不经过 JWT 鉴权),挂在 /api/admin 前缀下。 func RegisterLogin(g *gin.RouterGroup, h *Handler) { g.POST("/login", h.Login) }