feat: add multi-user auth and permission schema
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
package main
|
||||
|
||||
import "time"
|
||||
|
||||
type User struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
Username string `gorm:"uniqueIndex;size:64" json:"username"`
|
||||
PasswordHash string `json:"-"`
|
||||
Role string `gorm:"size:20;index" json:"role"`
|
||||
Status string `gorm:"size:20;index" json:"status"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
}
|
||||
|
||||
type UserPermission struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
UserID uint `gorm:"uniqueIndex:idx_user_permission" json:"userId"`
|
||||
Permission string `gorm:"uniqueIndex:idx_user_permission;size:64" json:"permission"`
|
||||
Enabled bool `json:"enabled"`
|
||||
}
|
||||
|
||||
type CreditAccount struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
UserID uint `gorm:"uniqueIndex" json:"userId"`
|
||||
Balance int64 `json:"balance"`
|
||||
Reserved int64 `json:"reserved"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
}
|
||||
|
||||
type CreditTransaction struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
UserID uint `gorm:"index" json:"userId"`
|
||||
Type string `gorm:"index;size:32" json:"type"`
|
||||
Amount int64 `json:"amount"`
|
||||
BalanceAfter int64 `json:"balanceAfter"`
|
||||
ReferenceType string `gorm:"size:32" json:"referenceType"`
|
||||
ReferenceID string `gorm:"size:64" json:"referenceId"`
|
||||
Reason string `json:"reason,omitempty"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
}
|
||||
|
||||
type CreditReservation struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
UserID uint `gorm:"index" json:"userId"`
|
||||
TaskID uint `gorm:"uniqueIndex" json:"taskId"`
|
||||
Amount int64 `json:"amount"`
|
||||
Status string `gorm:"index;size:20" json:"status"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
CompletedAt *time.Time `json:"completedAt,omitempty"`
|
||||
}
|
||||
|
||||
type RedeemBatch struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
Code string `gorm:"uniqueIndex;size:64" json:"code"`
|
||||
Credits int64 `json:"credits"`
|
||||
Count int `json:"count"`
|
||||
ExpiresAt *time.Time `json:"expiresAt,omitempty"`
|
||||
Note string `json:"note,omitempty"`
|
||||
CreatedBy uint `json:"createdBy"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
}
|
||||
|
||||
type RedeemCode struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
BatchID uint `gorm:"index" json:"batchId"`
|
||||
CodeHash string `gorm:"uniqueIndex;size:64" json:"-"`
|
||||
Prefix string `gorm:"size:24" json:"prefix"`
|
||||
Credits int64 `json:"credits"`
|
||||
Status string `gorm:"index;size:20" json:"status"`
|
||||
ExpiresAt *time.Time `json:"expiresAt,omitempty"`
|
||||
RedeemedBy *uint `json:"redeemedBy,omitempty"`
|
||||
RedeemedAt *time.Time `json:"redeemedAt,omitempty"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
}
|
||||
|
||||
type RedeemRecord struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
CodeID uint `gorm:"index" json:"codeId"`
|
||||
BatchID uint `gorm:"index" json:"batchId"`
|
||||
UserID uint `gorm:"index" json:"userId"`
|
||||
Credits int64 `json:"credits"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
}
|
||||
|
||||
type WebDAVConfig struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
UserID uint `gorm:"uniqueIndex" json:"userId"`
|
||||
Enabled bool `json:"enabled"`
|
||||
URL string `json:"url"`
|
||||
Username string `json:"username"`
|
||||
Password string `json:"-"`
|
||||
RootPath string `json:"rootPath"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
}
|
||||
|
||||
type Session struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
UserID uint `gorm:"index" json:"userId"`
|
||||
TokenHash string `gorm:"uniqueIndex;size:64" json:"-"`
|
||||
ExpiresAt time.Time `gorm:"index" json:"expiresAt"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
}
|
||||
|
||||
type AuditLog struct {
|
||||
ID uint `gorm:"primaryKey"`
|
||||
OperatorID uint `gorm:"index" json:"operatorId"`
|
||||
Action string `gorm:"index;size:64" json:"action"`
|
||||
TargetType string `gorm:"size:32" json:"targetType"`
|
||||
TargetID string `gorm:"size:64" json:"targetId"`
|
||||
Metadata string `json:"metadata,omitempty"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
}
|
||||
|
||||
const (
|
||||
RoleAdmin = "admin"
|
||||
RolePrivileged = "privileged"
|
||||
RoleUser = "user"
|
||||
UserActive = "active"
|
||||
UserDisabled = "disabled"
|
||||
PermDownload = "download"
|
||||
PermRedeem = "redeem"
|
||||
PermWebDAV = "webdav"
|
||||
PermWebDAVConfig = "webdav_config"
|
||||
)
|
||||
Reference in New Issue
Block a user