189 lines
11 KiB
Go
189 lines
11 KiB
Go
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))
|
|
}
|
|
|