51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
package user
|
|
|
|
import (
|
|
"time"
|
|
|
|
"zee/internal/resource/role"
|
|
)
|
|
|
|
// User đại diện cho một người dùng trong hệ thống
|
|
type User struct {
|
|
ID string `json:"id" gorm:"type:uuid;primaryKey;default:uuid_generate_v4()"`
|
|
Username string `json:"username" gorm:"size:50;uniqueIndex;not null"`
|
|
Email string `json:"email" gorm:"size:100;uniqueIndex;not null"`
|
|
PasswordHash string `json:"-" gorm:"not null"`
|
|
FullName string `json:"full_name" gorm:"size:100"`
|
|
AvatarURL string `json:"avatar_url,omitempty" gorm:"size:255"`
|
|
IsActive bool `json:"is_active" gorm:"default:true"`
|
|
LastLoginAt *time.Time `json:"last_login_at,omitempty"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
DeletedAt *time.Time `json:"-" gorm:"index"`
|
|
Roles []*role.Role `json:"roles,omitempty" gorm:"many2many:user_roles;"`
|
|
}
|
|
|
|
// TableName specifies the table name for the User model
|
|
func (User) TableName() string {
|
|
return "users"
|
|
}
|
|
|
|
// HasRole kiểm tra xem user có vai trò được chỉ định không
|
|
func (u *User) HasRole(roleName string) bool {
|
|
for _, r := range u.Roles {
|
|
if r.Name == roleName {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// HasAnyRole kiểm tra xem user có bất kỳ vai trò nào trong danh sách không
|
|
func (u *User) HasAnyRole(roles ...string) bool {
|
|
for _, r := range u.Roles {
|
|
for _, roleName := range roles {
|
|
if r.Name == roleName {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|