package model import ( "encoding/json" "github.com/jinzhu/gorm" ) // Group 用户组模型 type Group struct { gorm.Model Name string Policies string MaxStorage uint64 ShareEnabled bool WebDAVEnabled bool Aria2Option string Color string SpeedLimit int // 数据库忽略字段 PolicyList []uint `gorm:"-"` } // GetAria2Option 获取用户离线下载设备 // TODO:测试 func (group *Group) GetAria2Option() [3]bool { if len(group.Aria2Option) != 3 { return [3]bool{false, false, false} } return [3]bool{ group.Aria2Option[0] == '1', group.Aria2Option[1] == '1', group.Aria2Option[2] == '1', } } // GetGroupByID 用ID获取用户组 func GetGroupByID(ID interface{}) (Group, error) { var group Group result := DB.First(&group, ID) return group, result.Error } // AfterFind 找到用户组后的钩子,处理Policy列表 func (group *Group) AfterFind() (err error) { // 解析用户设置到OptionsSerialized err = json.Unmarshal([]byte(group.Policies), &group.PolicyList) return err } // BeforeSave Save用户前的钩子 func (group *Group) BeforeSave() (err error) { err = group.SerializePolicyList() return err } //SerializePolicyList 将序列后的可选策略列表写入数据库字段 func (group *Group) SerializePolicyList() (err error) { optionsValue, err := json.Marshal(&group.PolicyList) group.Policies = string(optionsValue) return err }