初始化2
This commit is contained in:
@@ -9,9 +9,14 @@ import (
|
||||
"seeyon-filesystem/config"
|
||||
"seeyon-filesystem/model"
|
||||
"seeyon-filesystem/storage"
|
||||
"seeyon-filesystem/utils"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 将日志输出接入环形缓冲区(同时保留控制台输出)
|
||||
log.SetOutput(utils.LogBuf)
|
||||
|
||||
cfg, err := config.Load()
|
||||
if err != nil {
|
||||
log.Fatalf("加载配置失败: %v", err)
|
||||
@@ -21,9 +26,9 @@ func main() {
|
||||
log.Fatalf("初始化数据库失败: %v", err)
|
||||
}
|
||||
|
||||
if err := autoMigrate(); err != nil {
|
||||
log.Fatalf("数据库迁移失败: %v", err)
|
||||
}
|
||||
// if err := autoMigrate(); err != nil {
|
||||
// log.Fatalf("数据库迁移失败: %v", err)
|
||||
// }
|
||||
|
||||
initDefaultData()
|
||||
|
||||
@@ -92,6 +97,7 @@ func initDefaultData() {
|
||||
{Code: "file:delete", Name: "删除文件", Resource: "file", Action: "delete"},
|
||||
{Code: "file:upload", Name: "上传文件", Resource: "file", Action: "upload"},
|
||||
{Code: "file:download", Name: "下载文件", Resource: "file", Action: "download"},
|
||||
{Code: "file:grant", Name: "授权文件权限", Resource: "file", Action: "grant"},
|
||||
{Code: "share:create", Name: "创建分享", Resource: "share", Action: "create"},
|
||||
{Code: "share:manage", Name: "管理分享", Resource: "share", Action: "manage"},
|
||||
{Code: "webdav:access", Name: "WebDAV访问", Resource: "webdav", Action: "access"},
|
||||
@@ -106,7 +112,7 @@ func initDefaultData() {
|
||||
|
||||
// ========== 2. 四级角色 ==========
|
||||
roles := []model.Role{
|
||||
{Name: "super_admin", DisplayName: "超级管理员", Description: "全平台最高权限, 仅用于后台运维", IsSystem: 1},
|
||||
{Name: "admin", DisplayName: "超级管理员", Description: "全平台最高权限, 仅用于后台运维", IsSystem: 1},
|
||||
{Name: "staff", DisplayName: "内部员工", Description: "团队内部成员, 可上传下载分享文件", IsSystem: 1},
|
||||
{Name: "user", DisplayName: "普通用户", Description: "注册用户, 基础存储功能", IsSystem: 1},
|
||||
{Name: "guest", DisplayName: "访客", Description: "仅可查看公开分享资源", IsSystem: 1},
|
||||
@@ -117,8 +123,8 @@ func initDefaultData() {
|
||||
|
||||
// 角色-权限分配
|
||||
rolePermMap := map[string][]string{
|
||||
"super_admin": {"*"}, // 全部权限
|
||||
"staff": {"file:create", "file:read", "file:update", "file:delete", "file:upload", "file:download", "share:create", "webdav:access"},
|
||||
"admin": {"*"}, // 全部权限
|
||||
"staff": {"file:create", "file:read", "file:update", "file:delete", "file:upload", "file:download", "file:grant", "share:create", "webdav:access"},
|
||||
"user": {"file:create", "file:read", "file:update", "file:upload", "file:download", "share:create"},
|
||||
"guest": {"file:read"},
|
||||
}
|
||||
@@ -190,7 +196,7 @@ func initDefaultData() {
|
||||
Priority int
|
||||
}
|
||||
assignDefs := []assignDef{
|
||||
{RoleName: "super_admin", PolicyType: "hot", Quota: 0, Priority: 10},
|
||||
{RoleName: "admin", PolicyType: "hot", Quota: 0, Priority: 10},
|
||||
{RoleName: "staff", PolicyType: "hot", Quota: 53687091200, Priority: 10},
|
||||
{RoleName: "user", PolicyType: "cold", Quota: 10737418240, Priority: 10},
|
||||
}
|
||||
@@ -229,16 +235,66 @@ func initDefaultData() {
|
||||
}
|
||||
}
|
||||
|
||||
// ========== 5. 确保admin用户有super_admin角色 ==========
|
||||
var adminUser model.User
|
||||
if config.DB.Where("username = ?", "admin").First(&adminUser).Error == nil {
|
||||
var superAdminRole model.Role
|
||||
config.DB.Where("name = ?", "super_admin").First(&superAdminRole)
|
||||
if superAdminRole.ID > 0 {
|
||||
var ur model.UserRole
|
||||
config.DB.Where("user_id = ? AND role_id = ?", adminUser.ID, superAdminRole.ID).FirstOrCreate(&ur)
|
||||
}
|
||||
}
|
||||
// ========== 5. 创建默认管理员 ==========
|
||||
var count int64
|
||||
config.DB.Model(&model.User{}).Where("username = ?", "admin").Count(&count)
|
||||
|
||||
if count == 0 {
|
||||
hashedPassword, err := bcrypt.GenerateFromPassword([]byte("admin123"), 10)
|
||||
if err != nil {
|
||||
log.Fatalf("密码加密失败: %v", err)
|
||||
}
|
||||
|
||||
admin := &model.User{
|
||||
Username: "admin",
|
||||
Password: string(hashedPassword),
|
||||
Status: 1,
|
||||
}
|
||||
|
||||
if err := config.DB.Create(admin).Error; err != nil {
|
||||
log.Fatalf("创建 admin 失败: %v", err)
|
||||
}
|
||||
log.Println("✅ 默认管理员已创建: admin / admin123")
|
||||
} else {
|
||||
log.Println("⚠️ admin 用户已存在,跳过")
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ========== 6. 确保admin用户有admin角色 ==========
|
||||
var adminUser model.User
|
||||
if config.DB.Where("username = ?", "admin").First(&adminUser).Error == nil {
|
||||
var superAdminRole model.Role
|
||||
err := config.DB.Where("name = ?", "admin").First(&superAdminRole).Error
|
||||
if err == nil { // ✅ 用 Error 判断,找到了才继续
|
||||
var ur model.UserRole
|
||||
if err := config.DB.Where("user_id = ? AND role_id = ?", adminUser.ID, superAdminRole.ID).First(&ur).Error; err != nil {
|
||||
// 没找到这条关联记录,才创建
|
||||
config.DB.Create(&model.UserRole{UserID: adminUser.ID, RoleID: superAdminRole.ID})
|
||||
log.Println("✅ admin 已分配 admin 角色")
|
||||
} else {
|
||||
log.Println("⚠️ admin 已有 admin 角色,跳过")
|
||||
}
|
||||
} else {
|
||||
log.Println("❌ 找不到 admin 角色")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ========== 7. 给没有角色的用户补上默认角色(user) ==========
|
||||
var userRole model.Role
|
||||
if config.DB.Where("name = ?", "user").First(&userRole).Error == nil {
|
||||
// ✅ 排除 admin
|
||||
var usersWithoutRole []model.User
|
||||
config.DB.Where("id NOT IN (SELECT user_id FROM fs_user_role) AND username != ?", "admin").Find(&usersWithoutRole)
|
||||
|
||||
for _, u := range usersWithoutRole {
|
||||
config.DB.Create(&model.UserRole{UserID: u.ID, RoleID: userRole.ID})
|
||||
}
|
||||
if len(usersWithoutRole) > 0 {
|
||||
log.Printf("已为 %d 个无角色用户分配默认角色", len(usersWithoutRole))
|
||||
}
|
||||
}
|
||||
|
||||
log.Println("默认数据初始化完成")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user