feat(auth): 新增系统启动时自动初始化默认超级管理员功能
- 新增默认管理员自动初始化逻辑,系统启动时检查并创建超级管理员账号 - 支持通过配置文件自定义账号信息(优先级:配置文件 > 代码默认值) - 新增 CreateSystemAccount 方法用于系统内部账号创建 - 新增默认管理员配置项和常量定义 - 更新 README.md 添加默认账号使用说明 - 归档 OpenSpec 变更提案及完整文档 相关文件: - internal/bootstrap/admin.go: 管理员初始化逻辑 - internal/service/account/service.go: 系统账号创建方法 - pkg/config/config.go: 默认管理员配置结构 - pkg/constants/constants.go: 默认值常量定义 - docs/add-default-admin-init/功能说明.md: 完整功能文档
This commit is contained in:
60
internal/bootstrap/admin.go
Normal file
60
internal/bootstrap/admin.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package bootstrap
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/break/junhong_cmp_fiber/internal/model"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/config"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
||||
pkgGorm "github.com/break/junhong_cmp_fiber/pkg/gorm"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func initDefaultAdmin(deps *Dependencies, services *services) error {
|
||||
logger := deps.Logger
|
||||
cfg := config.Get()
|
||||
|
||||
ctx := context.Background()
|
||||
ctx = pkgGorm.SkipDataPermission(ctx)
|
||||
|
||||
var count int64
|
||||
if err := deps.DB.WithContext(ctx).Model(&model.Account{}).Where("user_type = ?", constants.UserTypeSuperAdmin).Count(&count).Error; err != nil {
|
||||
logger.Error("检查超级管理员账号失败", zap.Error(err))
|
||||
return nil
|
||||
}
|
||||
|
||||
if count > 0 {
|
||||
logger.Info("超级管理员账号已存在,跳过初始化", zap.Int64("count", count))
|
||||
return nil
|
||||
}
|
||||
|
||||
username := constants.DefaultAdminUsername
|
||||
password := constants.DefaultAdminPassword
|
||||
phone := constants.DefaultAdminPhone
|
||||
|
||||
if cfg.DefaultAdmin.Username != "" {
|
||||
username = cfg.DefaultAdmin.Username
|
||||
}
|
||||
if cfg.DefaultAdmin.Password != "" {
|
||||
password = cfg.DefaultAdmin.Password
|
||||
}
|
||||
if cfg.DefaultAdmin.Phone != "" {
|
||||
phone = cfg.DefaultAdmin.Phone
|
||||
}
|
||||
|
||||
account := &model.Account{
|
||||
Username: username,
|
||||
Phone: phone,
|
||||
Password: password,
|
||||
UserType: constants.UserTypeSuperAdmin,
|
||||
Status: constants.StatusEnabled,
|
||||
}
|
||||
|
||||
if err := services.Account.CreateSystemAccount(ctx, account); err != nil {
|
||||
logger.Error("创建默认超级管理员失败", zap.Error(err), zap.String("username", username))
|
||||
return nil
|
||||
}
|
||||
|
||||
logger.Info("默认超级管理员创建成功", zap.String("username", username), zap.String("phone", phone))
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user