mirror of
				https://github.com/cloudreve/cloudreve.git
				synced 2025-11-04 04:47:24 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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
 | 
						||
}
 |