初始化项目:基础设施 + 用户认证 + 后台管理系统 + AGPL 3.0 许可
This commit is contained in:
15
internal/model/common.go
Normal file
15
internal/model/common.go
Normal 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
28
internal/model/dto.go
Normal 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
45
internal/model/user.go
Normal 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]
|
||||
}
|
||||
Reference in New Issue
Block a user