修复:管理员默认商户与账户设置

This commit is contained in:
yml2213
2026-08-13 14:12:25 +08:00
parent 6dae7fafa8
commit 538be52636
7 changed files with 181 additions and 23 deletions
+20 -6
View File
@@ -7,6 +7,7 @@ import (
"golang.org/x/crypto/bcrypt"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type UserService struct {
@@ -96,17 +97,30 @@ func (s *UserService) Create(username, password, nickname, role string, merchant
if err := tx.Create(user).Error; err != nil {
return err
}
if role == model.RoleAdmin && s.tenant != nil {
var selfMerchant model.Merchant
if err := tx.Where("code = ?", model.MerchantCodeSelfOperated).First(&selfMerchant).Error; err != nil {
return err
}
member := model.MerchantMember{MerchantID: selfMerchant.ID, UserID: user.ID, Role: model.MemberRoleOwner, Status: user.Status, IsDefault: true}
if err := tx.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "merchant_id"}, {Name: "user_id"}},
DoUpdates: clause.Assignments(map[string]interface{}{
"role": model.MemberRoleOwner, "status": user.Status, "is_default": true,
}),
}).Create(&member).Error; err != nil {
return err
}
return nil
}
if s.tenant != nil && merchantID != 0 {
memberRole := model.MemberRoleOperator
if role == model.RoleAdmin {
memberRole = model.MemberRoleOwner
}
member := model.MerchantMember{
MerchantID: merchantID,
UserID: user.ID,
Role: memberRole,
Status: user.Status,
IsDefault: role == model.RoleAdmin,
IsDefault: false,
}
if err := tx.Create(&member).Error; err != nil {
return err
@@ -180,8 +194,8 @@ func (s *UserService) ListMerchantAccountGroups(page, size int) ([]MerchantMembe
return groups, total, nil
}
// CreatePlatformAdmin creates an account with platform-only privileges. It
// deliberately does not assign the account to any merchant.
// CreatePlatformAdmin creates an account with platform privileges and the
// hidden self-operated merchant context required by merchant-side routes.
func (s *UserService) CreatePlatformAdmin(username, password, nickname string) (*model.User, error) {
return s.Create(username, password, nickname, model.RoleAdmin, 0)
}