- Go module with Gin, GORM, JWT, excelize dependencies - Configuration loading from YAML with all settings - GORM models for users, categories, components, configurations, alerts - Repository layer for all entities - Services: auth (JWT), pricing (median/average/weighted), components, quotes, configurations, export (CSV/XLSX), alerts - Middleware: JWT auth, role-based access, CORS - HTTP handlers for all API endpoints - Main server with dependency injection and graceful shutdown Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
package models
|
|
|
|
import "time"
|
|
|
|
type UserRole string
|
|
|
|
const (
|
|
RoleViewer UserRole = "viewer"
|
|
RoleEditor UserRole = "editor"
|
|
RolePricingAdmin UserRole = "pricing_admin"
|
|
RoleAdmin UserRole = "admin"
|
|
)
|
|
|
|
type User struct {
|
|
ID uint `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
Username string `gorm:"size:100;uniqueIndex;not null" json:"username"`
|
|
Email string `gorm:"size:255;uniqueIndex;not null" json:"email"`
|
|
PasswordHash string `gorm:"size:255;not null" json:"-"`
|
|
Role UserRole `gorm:"type:enum('viewer','editor','pricing_admin','admin');default:'viewer'" json:"role"`
|
|
IsActive bool `gorm:"default:true" json:"is_active"`
|
|
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
|
|
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
|
|
}
|
|
|
|
func (User) TableName() string {
|
|
return "qt_users"
|
|
}
|
|
|
|
func (u *User) CanEdit() bool {
|
|
return u.Role == RoleEditor || u.Role == RolePricingAdmin || u.Role == RoleAdmin
|
|
}
|
|
|
|
func (u *User) CanManagePricing() bool {
|
|
return u.Role == RolePricingAdmin || u.Role == RoleAdmin
|
|
}
|
|
|
|
func (u *User) CanManageUsers() bool {
|
|
return u.Role == RoleAdmin
|
|
}
|