package service import ( "github.com/gin-gonic/gin" "gorm.io/gorm" "mc-client-updater-server/pkg/dao" "mc-client-updater-server/pkg/dao/entity" "mc-client-updater-server/pkg/password" "mc-client-updater-server/pkg/result" "mc-client-updater-server/pkg/token" "mc-client-updater-server/pkg/util" "strings" ) type UserService struct { ctx *gin.Context } func NewUserService(c *gin.Context) *UserService { return &UserService{ctx: c} } func (s *UserService) Login(username, pwd string) { res := result.NewResult(s.ctx) user := entity.User{Username: username} tx := dao.DB().First(&user) if tx.Error != nil { switch tx.Error { case gorm.ErrRecordNotFound: res.LoginError() return default: res.LoginError() return } } // 验证密码 ok, err := password.Password().Verify(pwd, user.Password) if err != nil || !ok { res.LoginError() return } tokenStr := token.NewToken(user.Username) tokenResult := &entity.Token{ Token: tokenStr, GrantTo: user.Username, TTL: 86400, } tokenSrv := NewTokenService(s.ctx) err = tokenSrv.AddToken(tokenResult) if err != nil { res.InternalServerError("创建登录记录时发生意外错误") return } res.Success(tokenResult) } func (s *UserService) hasRole(role string, user *entity.User) bool { roles := strings.Split(user.Roles, ",") return util.InStringSlice(roles, role) } func (s *UserService) getUserByUsername(name string) *entity.User { user := entity.User{} tx := dao.DB().Where("username=?", name).First(&user) if tx.Error != nil { return nil } return &user } func (s *UserService) JudgeRoleByToken(role string, token *entity.Token) bool { user := s.getUserByUsername(token.GrantTo) return s.hasRole(role, user) }