87 lines
1.8 KiB
Go
87 lines
1.8 KiB
Go
package schema
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
type UserTokenInfo struct {
|
|
Aud string `json:"aud"`
|
|
Iss string `json:"iss"`
|
|
Iat float64 `json:"iat"`
|
|
Exp float64 `json:"exp"`
|
|
Sub UserId `json:"sub" mapstructure:"-"`
|
|
Scopes []string `json:"scopes"`
|
|
Roles *UserRoles `json:"roles"`
|
|
Permissions *UserPermissions `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 UserTokenInfo
|
|
Valid bool
|
|
}
|
|
|
|
type UserRole string
|
|
type UserPermission struct{}
|
|
|
|
type UserRoles []UserRole
|
|
type UserPermissions []UserPermission
|
|
|
|
type UserId string
|
|
|
|
func (u *User) GetId() UserId {
|
|
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() *UserRoles {
|
|
return u.Token.Roles
|
|
}
|
|
|
|
func (u *User) GetPermissions() *UserPermissions {
|
|
return u.Token.Permissions
|
|
}
|
|
|
|
func (u UserId) String() string {
|
|
return string(u)
|
|
}
|
|
|
|
func (ur *UserRoles) Has(role UserRole) bool {
|
|
for _, r := range *ur {
|
|
if r == role {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (up *UserPermissions) Has(permission UserPermission) bool {
|
|
for _, p := range *up {
|
|
if p == permission {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|