更新backend相关问题

This commit is contained in:
2026-06-01 18:08:32 +08:00
parent e685c9c0c7
commit 6d9977cb76
12 changed files with 412 additions and 361 deletions
+8 -12
View File
@@ -58,7 +58,6 @@ func SendPlatformLoginCode(account, channel string) error {
Channel: channel,
ExpiredAt: time.Now().Add(5 * time.Minute),
})
// TODO: 接入短信/邮箱发送通道。当前阶段只做服务端验证码校验链路。
return nil
}
@@ -98,19 +97,20 @@ func SendBackendLoginCode(tenantName, account, channel string) error {
if channel != "sms" && channel != "email" {
return errors.New("仅支持短信或邮箱验证码")
}
var tenant models.Tenant
if err := models.Orm.QueryTable(new(models.Tenant)).Filter("tenant_name", tenantName).One(&tenant); err != nil {
var tenant models.SystemTenant
if err := models.Orm.QueryTable(new(models.SystemTenant)).Filter("tenant_name", tenantName).One(&tenant); err != nil {
return errors.New("租户不存在")
}
rand.Seed(time.Now().UnixNano())
code := fmt.Sprintf("%06d", rand.Intn(1000000))
// 规则:先校验租户,再校验“输入的手机号/邮箱”是否为该租户已绑定的记录
switch channel {
case "sms":
phone := account
var user models.TenantUser
if err := models.Orm.QueryTable(new(models.TenantUser)).
var user models.SystemTenantUser
if err := models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("tid", tenant.ID).
Filter("phone", phone).
One(&user); err != nil {
@@ -129,8 +129,8 @@ func SendBackendLoginCode(tenantName, account, channel string) error {
}
case "email":
email := account
var user models.TenantUser
if err := models.Orm.QueryTable(new(models.TenantUser)).
var user models.SystemTenantUser
if err := models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("tid", tenant.ID).
Filter("email", email).
One(&user); err != nil {
@@ -165,7 +165,6 @@ func getDefaultSystemSMSConfig() (backendURL string, apiKey string, err error) {
Limit(1).
One(&row)
if err != nil {
// fallback:自定义网关
err2 := models.Orm.QueryTable(new(models.SystemSMS)).
Filter("config_code", "custom").
OrderBy("-id").
@@ -219,7 +218,6 @@ func enqueueSMSTaskForLogin(tid uint64, phone, content, code string) error {
return fmt.Errorf("gateway http status: %d, body: %s", resp.StatusCode, bodyStr)
}
// 2xx:认为已成功提交
now := time.Now()
tidCopy := tid
contentPtr := content
@@ -241,10 +239,8 @@ func enqueueSMSTaskForLogin(tid uint64, phone, content, code string) error {
}
_, insertErr := models.Orm.Insert(task)
// 入队成功但写任务表失败:不影响用户侧体验
if insertErr != nil {
return nil
}
return nil
}
+8 -9
View File
@@ -51,7 +51,7 @@ func toPlatformLoginUser(user *models.AdminUser) *PlatformLoginUser {
}
}
// PlatformAdminLogin 平台端登录:仅校验 yz_system_admin_user不需要租户
// PlatformAdminLogin 平台端登录:仅校验 yz_system_admin_user不需要租户
func PlatformAdminLogin(account, password string) (string, *PlatformLoginUser, error) {
account = strings.TrimSpace(account)
password = strings.TrimSpace(password)
@@ -84,7 +84,7 @@ func PlatformAdminLogin(account, password string) (string, *PlatformLoginUser, e
return token, loginUser, nil
}
// BackendLogin backend 登录:先校验租户,再校验租户下用户
// BackendLogin backend 登录:先校验租户,再校验租户下用户账号和密码。
func BackendLogin(tenantName, account, password string) (string, *PlatformLoginUser, error) {
tenantName = strings.TrimSpace(tenantName)
account = strings.TrimSpace(account)
@@ -93,9 +93,8 @@ func BackendLogin(tenantName, account, password string) (string, *PlatformLoginU
return "", nil, errors.New("租户名称、用户名或密码不能为空")
}
// 1) 校验租户名称
var tenant models.Tenant
err := models.Orm.QueryTable(new(models.Tenant)).
var tenant models.SystemTenant
err := models.Orm.QueryTable(new(models.SystemTenant)).
Filter("tenant_name", tenantName).
One(&tenant)
if err != nil {
@@ -105,9 +104,8 @@ func BackendLogin(tenantName, account, password string) (string, *PlatformLoginU
return "", nil, errors.New("租户已停用")
}
// 2) 在 tid 下校验租户用户账号和密码
var tenantUser models.TenantUser
err = models.Orm.QueryTable(new(models.TenantUser)).
var tenantUser models.SystemTenantUser
err = models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("tid", tenant.ID).
Filter("account", account).
One(&tenantUser)
@@ -143,10 +141,11 @@ func BackendLogin(tenantName, account, password string) (string, *PlatformLoginU
if tenantUser.Name != nil {
loginUser.Name = strings.TrimSpace(*tenantUser.Name)
}
return token, loginUser, nil
}
// PlatformGetCurrentUser 根据平台管理员用户 ID 返回登录用户信息(含角色名称)
// PlatformGetCurrentUser 根据平台管理员用户 ID 返回登录用户信息(含角色名称)
func PlatformGetCurrentUser(uid uint64) (*PlatformLoginUser, error) {
u, err := GetAdminUserByID(uid)
if err != nil {
+51 -14
View File
@@ -4,8 +4,8 @@ import "server/models"
// BindTenantUser 绑定用户到租户(若已存在则更新状态/默认值)
func BindTenantUser(tid, uid uint64, account, name, phone, email, password *string, isDefault, status int8, remark *string) (uint64, error) {
var existed models.TenantUser
err := models.Orm.QueryTable(new(models.TenantUser)).
var existed models.SystemTenantUser
err := models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("tid", tid).
Filter("uid", uid).
One(&existed)
@@ -20,11 +20,11 @@ func BindTenantUser(tid, uid uint64, account, name, phone, email, password *stri
"is_default": isDefault,
"remark": remark,
}
_, uErr := models.Orm.QueryTable(new(models.TenantUser)).Filter("id", existed.ID).Update(update)
_, uErr := models.Orm.QueryTable(new(models.SystemTenantUser)).Filter("id", existed.ID).Update(update)
return existed.ID, uErr
}
m := &models.TenantUser{
m := &models.SystemTenantUser{
Tid: tid,
Uid: uid,
Account: account,
@@ -42,14 +42,14 @@ func BindTenantUser(tid, uid uint64, account, name, phone, email, password *stri
// UnbindTenantUser 删除绑定关系
func UnbindTenantUser(id uint64) error {
_, err := models.Orm.QueryTable(new(models.TenantUser)).Filter("id", id).Delete()
_, err := models.Orm.QueryTable(new(models.SystemTenantUser)).Filter("id", id).Delete()
return err
}
// ListTenantUsersByTid 根据租户ID查询绑定关系
func ListTenantUsersByTid(tid uint64) ([]models.TenantUser, error) {
var rows []models.TenantUser
_, err := models.Orm.QueryTable(new(models.TenantUser)).
func ListTenantUsersByTid(tid uint64) ([]models.SystemTenantUser, error) {
var rows []models.SystemTenantUser
_, err := models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("tid", tid).
OrderBy("-is_default", "-id").
All(&rows)
@@ -57,27 +57,64 @@ func ListTenantUsersByTid(tid uint64) ([]models.TenantUser, error) {
}
// ListTenantBindingsByUid 根据用户ID查询绑定关系
func ListTenantBindingsByUid(uid uint64) ([]models.TenantUser, error) {
var rows []models.TenantUser
_, err := models.Orm.QueryTable(new(models.TenantUser)).
func ListTenantBindingsByUid(uid uint64) ([]models.SystemTenantUser, error) {
var rows []models.SystemTenantUser
_, err := models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("uid", uid).
OrderBy("-is_default", "-id").
All(&rows)
return rows, err
}
// GetTenantUserByUidAndTid 根据用户ID和租户ID查询租户用户绑定关系
func GetTenantUserByUidAndTid(uid, tid uint64) (*models.SystemTenantUser, error) {
var row models.SystemTenantUser
err := models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("uid", uid).
Filter("tid", tid).
One(&row)
if err != nil {
return nil, err
}
return &row, nil
}
// GetTenantUserByUid 根据用户ID查询默认/最新租户用户绑定关系
func GetTenantUserByUid(uid uint64) (*models.SystemTenantUser, error) {
var row models.SystemTenantUser
err := models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("uid", uid).
OrderBy("-is_default", "-id").
One(&row)
if err != nil {
return nil, err
}
return &row, nil
}
// GetTenantByID 根据租户ID查询租户信息
func GetTenantByID(id uint64) (*models.SystemTenant, error) {
var row models.SystemTenant
err := models.Orm.QueryTable(new(models.SystemTenant)).
Filter("id", id).
One(&row)
if err != nil {
return nil, err
}
return &row, nil
}
// SetDefaultTenant 设置用户默认租户(同一用户仅一个默认)
func SetDefaultTenant(uid, tid uint64) error {
_, err := models.Orm.QueryTable(new(models.TenantUser)).Filter("uid", uid).Update(map[string]interface{}{
_, err := models.Orm.QueryTable(new(models.SystemTenantUser)).Filter("uid", uid).Update(map[string]interface{}{
"is_default": 0,
})
if err != nil {
return err
}
_, err = models.Orm.QueryTable(new(models.TenantUser)).
_, err = models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("uid", uid).
Filter("tid", tid).
Update(map[string]interface{}{"is_default": 1})
return err
}