duidui_fiber/scripts/init_permissions.go
2026-03-27 10:34:03 +08:00

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))
}