package main import ( "database/sql" "fmt" "log" "os" "time" _ "github.com/go-sql-driver/mysql" "gopkg.in/yaml.v3" ) // Config 配置结构 type Config struct { MySQL struct { Host string `yaml:"host"` Port int `yaml:"port"` Username string `yaml:"username"` Password string `yaml:"password"` Database string `yaml:"database"` Charset string `yaml:"charset"` } `yaml:"mysql"` } // Permission 权限结构 type Permission struct { ID int64 Name string Code string Resource string Action string Description string } // 权限列表 var permissions = []Permission{ // 管理员管理权限 {ID: 1001, Name: "创建管理员", Code: "admin:user:create", Resource: "admin", Action: "create", Description: "创建管理员用户"}, {ID: 1002, Name: "查看管理员", Code: "admin:user:read", Resource: "admin", Action: "read", Description: "查看管理员用户列表和详情"}, {ID: 1003, Name: "更新管理员", Code: "admin:user:update", Resource: "admin", Action: "update", Description: "更新管理员用户信息"}, {ID: 1004, Name: "删除管理员", Code: "admin:user:delete", Resource: "admin", Action: "delete", Description: "删除管理员用户"}, {ID: 1005, Name: "创建角色", Code: "admin:role:create", Resource: "admin", Action: "create", Description: "创建角色"}, {ID: 1006, Name: "查看角色", Code: "admin:role:read", Resource: "admin", Action: "read", Description: "查看角色列表和详情"}, {ID: 1007, Name: "更新角色", Code: "admin:role:update", Resource: "admin", Action: "update", Description: "更新角色信息"}, {ID: 1008, Name: "删除角色", Code: "admin:role:delete", Resource: "admin", Action: "delete", Description: "删除角色"}, {ID: 1009, Name: "设置角色权限", Code: "admin:role:permission", Resource: "admin", Action: "update", Description: "设置角色的权限"}, {ID: 1010, Name: "创建权限", Code: "admin:permission:create", Resource: "admin", Action: "create", Description: "创建权限"}, {ID: 1011, Name: "查看权限", Code: "admin:permission:read", Resource: "admin", Action: "read", Description: "查看权限列表和详情"}, {ID: 1012, Name: "更新权限", Code: "admin:permission:update", Resource: "admin", Action: "update", Description: "更新权限信息"}, {ID: 1013, Name: "删除权限", Code: "admin:permission:delete", Resource: "admin", Action: "delete", Description: "删除权限"}, // 打卡营管理权限 {ID: 2001, Name: "创建分类", Code: "camp:category:create", Resource: "camp", Action: "create", Description: "创建打卡营分类"}, {ID: 2002, Name: "查看分类", Code: "camp:category:read", Resource: "camp", Action: "read", Description: "查看打卡营分类列表和详情"}, {ID: 2003, Name: "更新分类", Code: "camp:category:update", Resource: "camp", Action: "update", Description: "更新打卡营分类信息"}, {ID: 2004, Name: "删除分类", Code: "camp:category:delete", Resource: "camp", Action: "delete", Description: "删除打卡营分类"}, {ID: 2005, Name: "创建打卡营", Code: "camp:camp:create", Resource: "camp", Action: "create", Description: "创建打卡营"}, {ID: 2006, Name: "查看打卡营", Code: "camp:camp:read", Resource: "camp", Action: "read", Description: "查看打卡营列表和详情"}, {ID: 2007, Name: "更新打卡营", Code: "camp:camp:update", Resource: "camp", Action: "update", Description: "更新打卡营信息"}, {ID: 2008, Name: "删除打卡营", Code: "camp:camp:delete", Resource: "camp", Action: "delete", Description: "删除打卡营"}, {ID: 2009, Name: "创建小节", Code: "camp:section:create", Resource: "camp", Action: "create", Description: "创建打卡营小节"}, {ID: 2010, Name: "查看小节", Code: "camp:section:read", Resource: "camp", Action: "read", Description: "查看打卡营小节列表和详情"}, {ID: 2011, Name: "更新小节", Code: "camp:section:update", Resource: "camp", Action: "update", Description: "更新打卡营小节信息"}, {ID: 2012, Name: "删除小节", Code: "camp:section:delete", Resource: "camp", Action: "delete", Description: "删除打卡营小节"}, {ID: 2013, Name: "创建任务", Code: "camp:task:create", Resource: "camp", Action: "create", Description: "创建打卡营任务"}, {ID: 2014, Name: "查看任务", Code: "camp:task:read", Resource: "camp", Action: "read", Description: "查看打卡营任务列表和详情"}, {ID: 2015, Name: "更新任务", Code: "camp:task:update", Resource: "camp", Action: "update", Description: "更新打卡营任务信息"}, {ID: 2016, Name: "删除任务", Code: "camp:task:delete", Resource: "camp", Action: "delete", Description: "删除打卡营任务"}, {ID: 2017, Name: "查看用户进度", Code: "camp:progress:read", Resource: "camp", Action: "read", Description: "查看用户打卡营进度"}, {ID: 2018, Name: "更新用户进度", Code: "camp:progress:update", Resource: "camp", Action: "update", Description: "更新用户打卡营进度"}, {ID: 2019, Name: "重置任务进度", Code: "camp:progress:reset", Resource: "camp", Action: "delete", Description: "重置用户任务进度"}, {ID: 2020, Name: "查看用户打卡营", Code: "camp:user-camp:read", Resource: "camp", Action: "read", Description: "查看用户打卡营列表和状态"}, {ID: 2021, Name: "加入打卡营", Code: "camp:user-camp:join", Resource: "camp", Action: "create", Description: "用户加入打卡营"}, {ID: 2022, Name: "重置打卡营进度", Code: "camp:user-camp:reset", Resource: "camp", Action: "delete", Description: "重置用户打卡营进度"}, // 订单管理权限 {ID: 3001, Name: "创建订单", Code: "order:create", Resource: "order", Action: "create", Description: "创建订单"}, {ID: 3002, Name: "查看订单", Code: "order:read", Resource: "order", Action: "read", Description: "查看订单列表和详情"}, {ID: 3003, Name: "更新订单状态", Code: "order:update", Resource: "order", Action: "update", Description: "更新订单状态"}, // 题目试卷管理权限 {ID: 4001, Name: "创建题目", Code: "question:create", Resource: "question", Action: "create", Description: "创建题目"}, {ID: 4002, Name: "查看题目", Code: "question:read", Resource: "question", Action: "read", Description: "查看题目列表和详情"}, {ID: 4003, Name: "更新题目", Code: "question:update", Resource: "question", Action: "update", Description: "更新题目信息"}, {ID: 4004, Name: "删除题目", Code: "question:delete", Resource: "question", Action: "delete", Description: "删除题目"}, {ID: 4005, Name: "批量删除题目", Code: "question:batch_delete", Resource: "question", Action: "delete", Description: "批量删除题目"}, {ID: 4006, Name: "创建试卷", Code: "paper:create", Resource: "question", Action: "create", Description: "创建试卷"}, {ID: 4007, Name: "查看试卷", Code: "paper:read", Resource: "question", Action: "read", Description: "查看试卷列表和详情"}, {ID: 4008, Name: "更新试卷", Code: "paper:update", Resource: "question", Action: "update", Description: "更新试卷信息"}, {ID: 4009, Name: "删除试卷", Code: "paper:delete", Resource: "question", Action: "delete", Description: "删除试卷"}, {ID: 4010, Name: "批量删除试卷", Code: "paper:batch_delete", Resource: "question", Action: "delete", Description: "批量删除试卷"}, {ID: 4011, Name: "添加题目到试卷", Code: "paper:add_question", Resource: "question", Action: "update", Description: "添加题目到试卷"}, {ID: 4012, Name: "从试卷移除题目", Code: "paper:remove_question", Resource: "question", Action: "update", Description: "从试卷移除题目"}, {ID: 4013, Name: "创建答题记录", Code: "answer_record:create", Resource: "question", Action: "create", Description: "创建答题记录"}, {ID: 4014, Name: "查看答题记录", Code: "answer_record:read", Resource: "question", Action: "read", Description: "查看答题记录列表和详情"}, {ID: 4015, Name: "删除答题记录", Code: "answer_record:delete", Resource: "question", Action: "delete", Description: "删除答题记录"}, {ID: 4016, Name: "查看答题统计", Code: "answer_record:statistics", Resource: "question", Action: "read", Description: "查看答题统计数据"}, // 统计权限 {ID: 5001, Name: "查看仪表盘统计", Code: "statistics:dashboard:read", Resource: "statistics", Action: "read", Description: "查看仪表盘统计数据"}, // OSS权限 {ID: 6001, Name: "获取OSS上传凭证", Code: "oss:upload:signature", Resource: "oss", Action: "read", Description: "获取OSS上传凭证"}, // 支付权限 {ID: 7001, Name: "创建支付订单", Code: "payment:wechat:create", Resource: "payment", Action: "create", Description: "创建微信支付订单"}, {ID: 7002, Name: "处理支付通知", Code: "payment:wechat:notify", Resource: "payment", Action: "update", Description: "处理微信支付通知回调"}, // 调度器权限 {ID: 8001, Name: "添加调度任务", Code: "scheduler:task:create", Resource: "scheduler", Action: "create", Description: "添加调度器任务"}, {ID: 8002, Name: "查看调度任务", Code: "scheduler:task:read", Resource: "scheduler", Action: "read", Description: "查看调度器任务列表和状态"}, {ID: 8003, Name: "删除调度任务", Code: "scheduler:task:delete", Resource: "scheduler", Action: "delete", Description: "删除调度器任务"}, } func main() { // 读取配置文件 configPath := "config.yaml" if len(os.Args) > 1 { configPath = os.Args[1] } configData, err := os.ReadFile(configPath) if err != nil { log.Fatalf("读取配置文件失败: %v", err) } var config Config if err := yaml.Unmarshal(configData, &config); err != nil { log.Fatalf("解析配置文件失败: %v", err) } // 构建数据库连接字符串 dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local", config.MySQL.Username, config.MySQL.Password, config.MySQL.Host, config.MySQL.Port, config.MySQL.Database, config.MySQL.Charset, ) // 连接数据库 db, err := sql.Open("mysql", dsn) if err != nil { log.Fatalf("连接数据库失败: %v", err) } defer db.Close() // 测试连接 if err := db.Ping(); err != nil { log.Fatalf("数据库连接测试失败: %v", err) } log.Println("✅ 数据库连接成功") // 插入权限 now := time.Now() insertSQL := `INSERT INTO admin_permissions (id, name, code, resource, action, description, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE name = VALUES(name), code = VALUES(code), resource = VALUES(resource), action = VALUES(action), description = VALUES(description), updated_at = VALUES(updated_at)` stmt, err := db.Prepare(insertSQL) if err != nil { log.Fatalf("准备SQL语句失败: %v", err) } defer stmt.Close() successCount := 0 for _, perm := range permissions { _, err := stmt.Exec(perm.ID, perm.Name, perm.Code, perm.Resource, perm.Action, perm.Description, now, now) if err != nil { log.Printf("❌ 插入权限失败 [%s]: %v", perm.Code, err) } else { successCount++ log.Printf("✅ 权限已初始化: %s - %s", perm.Code, perm.Name) } } log.Printf("\n🎉 权限初始化完成!成功: %d/%d", successCount, len(permissions)) }