feat: 添加管理员账号管理命令

- list-admin: 列出所有管理员账号
- reset-password: 重置指定管理员密码
- create-admin: 创建新管理员账号

用法:
  docker exec verify-app ./main list-admin
  docker exec verify-app ./main reset-password <用户名> [新密码]
  docker exec verify-app ./main create-admin <用户名> <密码> [邮箱]
This commit is contained in:
2026-05-03 12:10:31 +08:00
parent 67a67517b0
commit d7170b45ac
+100 -4
View File
@@ -25,8 +25,12 @@ var embeddedFiles embed.FS
func main() {
if len(os.Args) > 1 {
switch os.Args[1] {
case "list-admin":
listAdmins()
case "reset-password":
resetPassword()
case "create-admin":
createAdmin()
case "help", "-h", "--help":
printHelp()
default:
@@ -42,13 +46,105 @@ func main() {
func printHelp() {
fmt.Println("用法:")
fmt.Println(" verify 启动服务器")
fmt.Println(" verify 启动服务器")
fmt.Println(" verify list-admin 列出所有管理员账号")
fmt.Println(" verify reset-password <用户名> [新密码] 重置管理员密码")
fmt.Println(" verify help 显示帮助信息")
fmt.Println(" verify create-admin <用户名> <密码> [邮箱] 创建新管理员")
fmt.Println(" verify help 显示帮助信息")
fmt.Println()
fmt.Println("示例:")
fmt.Println(" verify reset-password admin 随机生成新密码")
fmt.Println(" verify reset-password admin newpass 设置指定密码")
fmt.Println(" verify list-admin")
fmt.Println(" verify reset-password admin")
fmt.Println(" verify reset-password admin newpass")
fmt.Println(" verify create-admin newadmin password123 admin@example.com")
}
func listAdmins() {
config.Init()
database.Init()
var users []struct {
ID uint
Username string
Email *string
Role string
Status string
CreatedAt string
}
if err := database.DB.Table("users").Where("role = ?", "admin").Find(&users).Error; err != nil {
fmt.Printf("错误: 查询失败 - %v\n", err)
os.Exit(1)
}
if len(users) == 0 {
fmt.Println("没有找到管理员账号")
return
}
fmt.Println("管理员账号列表:")
fmt.Println("----------------------------------------")
for _, u := range users {
email := ""
if u.Email != nil {
email = *u.Email
}
fmt.Printf("ID: %d 用户名: %s 邮箱: %s 状态: %s\n", u.ID, u.Username, email, u.Status)
}
fmt.Println("----------------------------------------")
}
func createAdmin() {
config.Init()
database.Init()
if len(os.Args) < 4 {
fmt.Println("用法: verify create-admin <用户名> <密码> [邮箱]")
os.Exit(1)
}
username := os.Args[2]
password := os.Args[3]
email := ""
if len(os.Args) >= 5 {
email = os.Args[4]
}
if len(password) < 6 {
fmt.Println("错误: 密码长度至少6位")
os.Exit(1)
}
var count int64
database.DB.Table("users").Where("username = ?", username).Count(&count)
if count > 0 {
fmt.Printf("错误: 用户名 '%s' 已存在\n", username)
os.Exit(1)
}
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
fmt.Printf("错误: 密码加密失败 - %v\n", err)
os.Exit(1)
}
emailPtr := (*string)(nil)
if email != "" {
emailPtr = &email
}
if err := database.DB.Table("users").Create(map[string]interface{}{
"username": username,
"password": string(hashedPassword),
"email": emailPtr,
"role": "admin",
"status": "active",
}).Error; err != nil {
fmt.Printf("错误: 创建失败 - %v\n", err)
os.Exit(1)
}
fmt.Printf("成功: 管理员账号 '%s' 已创建\n", username)
}
func resetPassword() {