This commit is contained in:
huangjin
2026-06-29 17:34:59 +08:00
commit fe3ad20fe2
271 changed files with 51767 additions and 0 deletions

View File

@@ -0,0 +1,95 @@
package admin
import (
"crypto/sha256"
"fmt"
"com.sclktx/m/v2/internal/common/model"
"com.sclktx/m/v2/internal/common/response"
"com.sclktx/m/v2/internal/common/utils"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type AdminAuthHandler struct {
db *gorm.DB
jwtSecret string
expireHours int
}
func NewAdminAuthHandler(db *gorm.DB, jwtSecret string, expireHours int) *AdminAuthHandler {
return &AdminAuthHandler{db: db, jwtSecret: jwtSecret, expireHours: expireHours}
}
type AdminLoginRequest struct {
Account string `json:"account" binding:"required"`
Password string `json:"password" binding:"required"`
}
// @Summary 管理员登录
// @Description 管理员账号密码登录返回JWT token
// @Tags 管理员
// @Accept json
// @Produce json
// @Param body body AdminLoginRequest true "管理员登录信息"
// @Success 200 {object} response.Response{data=object{token=string,admin_id=uint,account=string,name=string,is_super=bool}} "成功"
// @Router /admin/login [post]
func (h *AdminAuthHandler) Login(c *gin.Context) {
var req AdminLoginRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.BadRequest(c, "参数错误")
return
}
var admin model.AdminUser
if err := h.db.Where("account = ? AND status = 1", req.Account).First(&admin).Error; err != nil {
response.Unauthorized(c, "账号或密码错误")
return
}
hashed := fmt.Sprintf("%x", sha256.Sum256([]byte(req.Password)))
if admin.Password != hashed {
response.Unauthorized(c, "账号或密码错误")
return
}
token, err := utils.GenerateAdminToken(admin.ID, admin.Account, h.jwtSecret, h.expireHours)
if err != nil {
response.InternalError(c, "生成令牌失败")
return
}
response.Success(c, gin.H{
"token": token,
"admin_id": admin.ID,
"account": admin.Account,
"name": admin.Name,
"is_super": admin.IsSuper,
})
}
// @Summary 获取管理员信息
// @Description 获取当前登录管理员的个人信息
// @Tags 管理员
// @Accept json
// @Produce json
// @Security BearerAuth
// @Success 200 {object} response.Response{data=object{id=uint,account=string,name=string,is_super=bool}} "成功"
// @Router /admin/profile [get]
func (h *AdminAuthHandler) GetProfile(c *gin.Context) {
adminID, _ := c.Get("admin_id")
var admin model.AdminUser
if err := h.db.First(&admin, adminID).Error; err != nil {
response.NotFound(c, "管理员不存在")
return
}
response.Success(c, gin.H{
"id": admin.ID,
"account": admin.Account,
"name": admin.Name,
"is_super": admin.IsSuper,
})
}