package services import ( "crypto/md5" "encoding/hex" "errors" "strings" "server/models" "server/pkg/jwtutil" ) type PlatformLoginUser struct { ID uint64 Account string Name string Rid uint64 Avatar string RoleName string } func adminRoleNameByID(roleID uint64) string { if roleID == 0 { return "" } var role models.AdminRole err := models.Orm.QueryTable(new(models.AdminRole)).Filter("id", roleID).One(&role) if err != nil { return "" } return role.Name } func toPlatformLoginUser(user *models.AdminUser) *PlatformLoginUser { name := "" if user.Name != nil { name = *user.Name } avatar := "" if user.Avatar != nil { avatar = *user.Avatar } return &PlatformLoginUser{ ID: user.ID, Account: user.Account, Name: name, Rid: user.RoleID, Avatar: avatar, RoleName: adminRoleNameByID(user.RoleID), } } func md5Hex(s string) string { sum := md5.Sum([]byte(s)) return hex.EncodeToString(sum[:]) } // PlatformLogin 平台登录业务(仅允许平台用户 yz_system_admin_user 登录) func PlatformLogin(account, password string) (string, *PlatformLoginUser, error) { account = strings.TrimSpace(account) password = strings.TrimSpace(password) if account == "" || password == "" { return "", nil, errors.New("用户名或密码不能为空") } var user models.AdminUser err := models.Orm.QueryTable(new(models.AdminUser)). Filter("account", account). One(&user) if err != nil { return "", nil, errors.New("用户名或密码错误") } if user.Password != md5Hex(password) { return "", nil, errors.New("用户名或密码错误") } if user.Status == 0 { return "", nil, errors.New("账号已禁用") } const fakeTenantID = 0 const userType = "platform" token, err := jwtutil.GenerateToken(int(user.ID), user.Account, fakeTenantID, userType) if err != nil { return "", nil, err } loginUser := toPlatformLoginUser(&user) return token, loginUser, nil } // PlatformGetCurrentUser 根据平台管理员用户 ID 返回登录用户信息(含角色名称) func PlatformGetCurrentUser(uid uint64) (*PlatformLoginUser, error) { u, err := models.GetAdminUserByID(uid) if err != nil { return nil, errors.New("用户不存在") } if u.Status == 0 { return nil, errors.New("账号已禁用") } return toPlatformLoginUser(u), nil }