leaf-library-3/internal/dto/user/user.go

118 lines
2.2 KiB
Go
Raw Normal View History

2024-12-05 17:44:29 +00:00
package user
import (
"slices"
"time"
)
2024-12-06 15:38:22 +00:00
// AnonymousUser 调试模式下的用户
2024-12-06 18:44:32 +00:00
const AnonymousUser ID = "anonymous"
2024-12-06 15:38:22 +00:00
2024-12-05 17:44:29 +00:00
type Token struct {
Aud string `json:"aud"`
Iss string `json:"iss"`
Iat float64 `json:"iat"`
Exp float64 `json:"exp"`
2024-12-06 18:44:32 +00:00
Sub ID `json:"sub" mapstructure:"-"`
2024-12-05 17:44:29 +00:00
Scopes []string `json:"scopes"`
Roles []Role `json:"roles,omitempty"`
Permissions []Permission `json:"permissions"`
Uuid string `json:"uuid"`
Avatar string `json:"avatar"`
Name string `json:"name"`
EmailVerified bool `json:"email_verified"`
RealNameVerified bool `json:"real_name_verified"`
PhoneVerified bool `json:"phone_verified"`
Email string `json:"email"`
Phone string `json:"phone"`
CreatedAt time.Time `json:"created_at"`
}
type User struct {
Token Token
2024-12-06 18:44:32 +00:00
ID ID
2024-12-05 17:44:29 +00:00
Valid bool
}
type Role string
func (r Role) String() string {
return string(r)
}
type Permission string
2024-12-06 18:44:32 +00:00
type ID string
2024-12-05 17:44:29 +00:00
2024-12-06 18:44:32 +00:00
func (u *User) GetId() ID {
2024-12-05 17:44:29 +00:00
return u.Token.Sub
}
func (u *User) GetName() string {
return u.Token.Name
}
func (u *User) GetEmail() string {
return u.Token.Email
}
func (u *User) GetPhone() string {
return u.Token.Phone
}
func (u *User) GetRoles() []Role {
return u.Token.Roles
}
func (u *User) GetPermissions() []Permission {
return u.Token.Permissions
}
func (u *User) GetAvatar() string {
return u.Token.Avatar
}
func (u *User) GetUuid() string {
return u.Token.Uuid
}
func (u *User) HasRoles(roles ...Role) bool {
if len(roles) == 0 {
return true
}
for _, role := range roles {
pass := slices.Contains(u.Token.Roles, role)
if !pass {
return false
}
}
return true
}
func (u *User) HasPermissions(permissions ...Permission) bool {
if len(permissions) == 0 {
return true
}
for _, p := range permissions {
pass := slices.Contains(u.Token.Permissions, p)
if !pass {
return false
}
}
return true
}
2024-12-06 18:44:32 +00:00
func (u ID) String() string {
2024-12-05 17:44:29 +00:00
return string(u)
}
func (up Permission) String() string {
return string(up)
}