- 新增 storage 配置(存储目录、单文件大小上限),ConfigVersion 3→4 自动补全 - internal/file:上传(sha256 秒传去重)、删除(上传者或管理员,引用中 409)、公开查看;本地存储 + 操作日志 + 引用计数,仅安全类型内联防存储型 XSS - internal/avatar:PUT/DELETE /api/me/avatar,自动管理头像文件引用与旧头像解绑 - 前端引入 vue-advanced-cropper,个人中心支持上传/更换/删除头像,裁剪输出 512×512 JPEG;http 请求支持 FormData - 导出 auth.CurrentUser、新增 model.User.IsAdmin 与 testutil 多部件上传辅助,补充接口测试并重新生成 Swagger 文档
42 lines
1.3 KiB
Go
42 lines
1.3 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// 性别取值,空字符串表示未设置。
|
|
const (
|
|
GenderMale = "male"
|
|
GenderFemale = "female"
|
|
GenderOther = "other"
|
|
)
|
|
|
|
// User 用户,与用户组为多对多关系。
|
|
type User struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
Username string `gorm:"size:50;uniqueIndex;not null" json:"username"`
|
|
Email string `gorm:"size:255;uniqueIndex;not null" json:"email"`
|
|
PasswordHash string `gorm:"size:255;not null" json:"-"`
|
|
Nickname string `gorm:"size:50" json:"nickname"`
|
|
Avatar string `gorm:"size:255" json:"avatar"`
|
|
Gender string `gorm:"size:10;not null;default:''" json:"gender" example:"male"`
|
|
Birthday Date `gorm:"type:date" json:"birthday" swaggertype:"string" example:"1995-06-15"`
|
|
Status int8 `gorm:"not null;default:1" json:"status"`
|
|
Groups []UserGroup `gorm:"-" json:"groups"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
}
|
|
|
|
// IsAdmin 是否属于管理员组。
|
|
func (u User) IsAdmin() bool {
|
|
for _, group := range u.Groups {
|
|
if group.ID == GroupIDAdmin {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|