Files
91-api-server/cmd/user.go
yuqianhe 3e27017e42 feat: add auth, db, gateway, email, ratelimit, geoblock modules and new handlers
- New CLI commands: key, user
- New internal modules: auth (middleware, password, user), db (db, logs, products), email, gateway (gateway, hooks, middlewares), handler (admin, auth, dev, log, product, settings), middleware/geoblock, ratelimit
- New demo frontend page
- Updated config, server, analytics, stats, and existing frontend pages
2026-06-26 21:32:51 +09:00

156 lines
3.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package cmd
import (
"fmt"
"api-server/internal/auth"
"api-server/internal/db"
"github.com/spf13/cobra"
)
var userCmd = &cobra.Command{
Use: "user",
Short: "用户管理",
}
func openDB(cmd *cobra.Command) (*db.DB, error) {
dbDriver, _ := cmd.Flags().GetString("db-driver")
dbDSN, _ := cmd.Flags().GetString("db-dsn")
return db.Open(db.Config{Driver: db.Driver(dbDriver), DSN: dbDSN})
}
var userListCmd = &cobra.Command{
Use: "list",
Short: "列出所有用户",
RunE: func(cmd *cobra.Command, args []string) error {
database, err := openDB(cmd)
if err != nil {
return err
}
defer database.Close()
users, err := database.ListUsers()
if err != nil {
return err
}
for _, u := range users {
fmt.Printf(" [%d] %s %s %s\n", u.ID, u.Role, u.Email, u.Name)
}
return nil
},
}
var userPromoteCmd = &cobra.Command{
Use: "promote <email>",
Short: "提升用户为管理员",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
database, err := openDB(cmd)
if err != nil {
return err
}
defer database.Close()
if err := database.PromoteUser(args[0]); err != nil {
return fmt.Errorf("提升失败: %w", err)
}
fmt.Printf("✅ 用户 %s 已提升为管理员\n", args[0])
return nil
},
}
var userCreateCmd = &cobra.Command{
Use: "create <email> <password> [name]",
Short: "创建用户(默认角色 user",
Args: cobra.RangeArgs(2, 3),
RunE: func(cmd *cobra.Command, args []string) error {
database, err := openDB(cmd)
if err != nil {
return err
}
defer database.Close()
email, password := args[0], args[1]
name := ""
if len(args) > 2 {
name = args[2]
}
isAdmin, _ := cmd.Flags().GetBool("admin")
hash, err := auth.HashPassword(password)
if err != nil {
return fmt.Errorf("密码加密失败: %w", err)
}
user, err := database.CreateUser(email, hash, name)
if err != nil {
return fmt.Errorf("创建失败: %w", err)
}
if isAdmin {
if err := database.PromoteUser(email); err != nil {
return fmt.Errorf("提升为管理员失败: %w", err)
}
}
fmt.Printf("✅ 用户 [%d] %s 创建成功 (role=%s)\n", user.ID, user.Email, user.Role)
return nil
},
}
var userDeleteCmd = &cobra.Command{
Use: "delete <email>",
Short: "删除用户",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
database, err := openDB(cmd)
if err != nil {
return err
}
defer database.Close()
if err := database.DeleteUser(args[0]); err != nil {
return fmt.Errorf("删除失败: %w", err)
}
fmt.Printf("✅ 用户 %s 已删除\n", args[0])
return nil
},
}
var userResetPwdCmd = &cobra.Command{
Use: "reset-password <email> <new-password>",
Short: "重置用户密码",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
database, err := openDB(cmd)
if err != nil {
return err
}
defer database.Close()
hash, err := auth.HashPassword(args[1])
if err != nil {
return fmt.Errorf("密码加密失败: %w", err)
}
if err := database.UpdatePassword(args[0], hash); err != nil {
return fmt.Errorf("密码重置失败: %w", err)
}
fmt.Printf("✅ 用户 %s 密码已重置\n", args[0])
return nil
},
}
func init() {
userCmd.PersistentFlags().String("db-driver", "sqlite", "数据库驱动")
userCmd.PersistentFlags().String("db-dsn", "./data/api.db", "数据库 DSN")
userCmd.AddCommand(userListCmd)
userCmd.AddCommand(userPromoteCmd)
userCmd.AddCommand(userCreateCmd)
userCmd.AddCommand(userDeleteCmd)
userCmd.AddCommand(userResetPwdCmd)
userCreateCmd.Flags().Bool("admin", false, "创建后直接提升为管理员")
}