diff --git a/models/group.go b/models/group.go index 490fc38..8480cd8 100644 --- a/models/group.go +++ b/models/group.go @@ -2,6 +2,7 @@ package model import ( "encoding/json" + "github.com/jinzhu/gorm" ) @@ -80,3 +81,9 @@ func (group *Group) SerializePolicyList() (err error) { group.Options = string(optionsValue) return err } + +func GetFristGroup() (Group, error) { + var group Group + err := DB.First(&group).Error + return group, err +} diff --git a/models/migration.go b/models/migration.go index 17a08ce..d1f666b 100644 --- a/models/migration.go +++ b/models/migration.go @@ -2,6 +2,10 @@ package model import ( "context" + "fmt" + "sort" + "strings" + "github.com/cloudreve/Cloudreve/v3/models/scripts/invoker" "github.com/cloudreve/Cloudreve/v3/pkg/cache" "github.com/cloudreve/Cloudreve/v3/pkg/conf" @@ -9,8 +13,6 @@ import ( "github.com/fatih/color" "github.com/hashicorp/go-version" "github.com/jinzhu/gorm" - "sort" - "strings" ) // 是否需要迁移 @@ -46,11 +48,22 @@ func migration() { // 创建初始存储策略 addDefaultPolicy() + // 获取第一个存储策略 + policy, err := GetFirstPolicy() + if err != nil { + util.Log().Panic(fmt.Sprintf("Failed to get frist policy: %v", err)) + } + // 创建初始用户组 - addDefaultGroups() + addDefaultGroups(policy.ID) + + group, err := GetFristGroup() + if err != nil { + util.Log().Panic(fmt.Sprintf("Failed to get frist group: %v", err)) + } // 创建初始管理员账户 - addDefaultUser() + addDefaultUser(group.ID) // 创建初始节点 addDefaultNode() @@ -93,13 +106,13 @@ func addDefaultSettings() { } } -func addDefaultGroups() { +func addDefaultGroups(pID uint) { _, err := GetGroupByID(1) // 未找到初始管理组时,则创建 if gorm.IsRecordNotFoundError(err) { defaultAdminGroup := Group{ Name: "Admin", - PolicyList: []uint{1}, + PolicyList: []uint{pID}, MaxStorage: 1 * 1024 * 1024 * 1024, ShareEnabled: true, WebDAVEnabled: true, @@ -124,7 +137,7 @@ func addDefaultGroups() { if gorm.IsRecordNotFoundError(err) { defaultAdminGroup := Group{ Name: "User", - PolicyList: []uint{1}, + PolicyList: []uint{pID}, MaxStorage: 1 * 1024 * 1024 * 1024, ShareEnabled: true, WebDAVEnabled: true, @@ -158,7 +171,7 @@ func addDefaultGroups() { } } -func addDefaultUser() { +func addDefaultUser(gID uint) { _, err := GetUserByID(1) password := util.RandStringRunes(8) @@ -168,7 +181,7 @@ func addDefaultUser() { defaultUser.Email = "admin@cloudreve.org" defaultUser.Nick = "admin" defaultUser.Status = Active - defaultUser.GroupID = 1 + defaultUser.GroupID = gID err := defaultUser.SetPassword(password) if err != nil { util.Log().Panic("Failed to create password: %s", err) diff --git a/models/policy.go b/models/policy.go index f1e0202..d66849d 100644 --- a/models/policy.go +++ b/models/policy.go @@ -3,13 +3,14 @@ package model import ( "encoding/gob" "encoding/json" - "github.com/gofrs/uuid" "path" "path/filepath" "strconv" "strings" "time" + "github.com/gofrs/uuid" + "github.com/cloudreve/Cloudreve/v3/pkg/cache" "github.com/cloudreve/Cloudreve/v3/pkg/util" "github.com/jinzhu/gorm" @@ -106,6 +107,12 @@ func GetPolicyByID(ID interface{}) (Policy, error) { return policy, result.Error } +func GetFirstPolicy() (Policy, error) { + var policy Policy + err := DB.First(&policy).Error + return policy, err +} + // AfterFind 找到存储策略后的钩子 func (policy *Policy) AfterFind() (err error) { // 解析存储策略设置到OptionsSerialized diff --git a/models/user.go b/models/user.go index ff1d6dd..933b106 100644 --- a/models/user.go +++ b/models/user.go @@ -198,7 +198,7 @@ func (user *User) AfterFind() (err error) { return err } -//SerializeOptions 将序列后的Option写入到数据库字段 +// SerializeOptions 将序列后的Option写入到数据库字段 func (user *User) SerializeOptions() (err error) { optionsValue, err := json.Marshal(&user.OptionsSerialized) user.Options = string(optionsValue)