Cloudreve/models/group.go

87 lines
2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
Options string `json:"-",gorm:"size:4096"`
// 数据库忽略字段
PolicyList []uint `gorm:"-"`
OptionsSerialized GroupOption `gorm:"-"`
}
// GroupOption 用户组其他配置
type GroupOption struct {
ArchiveDownloadEnabled bool `json:"archive_download"`
ArchiveTaskEnabled bool `json:"archive_task"`
}
// GetAria2Option 获取用户离线下载设备
func (group *Group) GetAria2Option() [3]bool {
if len(group.Aria2Option) != 5 {
return [3]bool{false, false, false}
}
return [3]bool{
group.Aria2Option[0] == '1',
group.Aria2Option[2] == '1',
group.Aria2Option[4] == '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) {
// 解析用户组策略列表
if group.Policies != "" {
err = json.Unmarshal([]byte(group.Policies), &group.PolicyList)
}
if err != nil {
return err
}
// 解析用户组设置
if group.Options != "" {
err = json.Unmarshal([]byte(group.Options), &group.OptionsSerialized)
}
return err
}
// BeforeSave Save用户前的钩子
func (group *Group) BeforeSave() (err error) {
err = group.SerializePolicyList()
return err
}
//SerializePolicyList 将序列后的可选策略列表、配置写入数据库字段
// TODO 完善测试
func (group *Group) SerializePolicyList() (err error) {
policies, err := json.Marshal(&group.PolicyList)
group.Policies = string(policies)
if err != nil {
return err
}
optionsValue, err := json.Marshal(&group.OptionsSerialized)
group.Options = string(optionsValue)
return err
}