初始化项目:基础设施 + 用户认证 + 后台管理系统 + AGPL 3.0 许可

This commit is contained in:
2026-05-26 13:46:33 +08:00
parent 1315df6501
commit 483fdd919f
56 changed files with 5804 additions and 40 deletions

15
internal/model/common.go Normal file
View File

@ -0,0 +1,15 @@
package model
import (
"time"
"gorm.io/gorm"
)
// BaseModel 所有模型的公共字段
type BaseModel struct {
ID uint `gorm:"primarykey;column:uid" json:"uid"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}

28
internal/model/dto.go Normal file
View File

@ -0,0 +1,28 @@
package model
// RegisterRequest 注册请求
type RegisterRequest struct {
Email string `json:"email" binding:"required,email"`
Password string `json:"password" binding:"required,min=8"`
ConfirmPassword string `json:"confirm_password" binding:"required,eqfield=Password"`
RememberMe bool `json:"remember_me"`
}
// LoginRequest 登录请求
type LoginRequest struct {
Email string `json:"email" binding:"required,email"`
Password string `json:"password" binding:"required"`
RememberMe bool `json:"remember_me"`
}
// CheckEmailRequest 检查邮箱是否已注册
type CheckEmailRequest struct {
Email string `json:"email" binding:"required,email"`
}
// AuthResponse 认证响应(含 JWT
type AuthResponse struct {
Token string `json:"token"`
RefreshToken string `json:"refresh_token"`
User User `json:"user"`
}

45
internal/model/user.go Normal file
View File

@ -0,0 +1,45 @@
package model
// User 用户模型
type User struct {
BaseModel
Email string `gorm:"type:varchar(255);not null" json:"email"`
PasswordHash string `gorm:"type:varchar(255);not null" json:"-"`
Username string `gorm:"type:varchar(16);uniqueIndex;not null" json:"username"`
Avatar string `gorm:"type:varchar(500);default:''" json:"avatar"`
Bio string `gorm:"type:text" json:"bio"`
Role string `gorm:"type:varchar(20);default:user;index;not null" json:"role"`
Status string `gorm:"type:varchar(20);default:active;index;not null" json:"status"`
TokenVersion int `gorm:"default:0;not null" json:"-"` // 令牌版本,+1 即时吊销所有 JWT
}
// 角色常量
const (
RoleUser = "user"
RoleModerator = "moderator"
RoleAdmin = "admin"
RoleOwner = "owner"
)
// 状态常量
const (
StatusActive = "active"
StatusBanned = "banned"
StatusDeleted = "deleted" // 用户主动注销7 天内登录可恢复)
StatusLocked = "locked" // 永久锁定(管理员删除或注销满 7 天)
)
// roleLevel 角色层级映射(数字越大权限越高)
var roleLevel = map[string]int{
RoleUser: 0,
RoleModerator: 1,
RoleAdmin: 2,
RoleOwner: 3,
}
// HasMinRole 检查 role 是否达到 minRole 的权限级别
func HasMinRole(role, minRole string) bool {
return roleLevel[role] >= roleLevel[minRole]
}