57 lines
1.7 KiB
Go
57 lines
1.7 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// User represents an identity in the Nexus Control Panel.
|
|
// It is the single source of truth for all connected tools.
|
|
type User struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Email string `json:"email"`
|
|
DisplayName string `json:"display_name"`
|
|
PasswordHash string `json:"-"` // never serialized
|
|
MFAEnabled bool `json:"mfa_enabled"`
|
|
MFASecret string `json:"-"` // never serialized
|
|
EmailVerified bool `json:"email_verified"`
|
|
Active bool `json:"active"`
|
|
LastLoginAt *time.Time `json:"last_login_at,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// Role represents a named set of permissions.
|
|
type Role struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// UserRole associates a user with a role.
|
|
type UserRole struct {
|
|
UserID uuid.UUID `json:"user_id"`
|
|
RoleID uuid.UUID `json:"role_id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// Permission defines a granular action that can be allowed or denied.
|
|
type Permission struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
Resource string `json:"resource"`
|
|
Action string `json:"action"`
|
|
Description string `json:"description,omitempty"`
|
|
}
|
|
|
|
// RolePermission associates a role with a permission.
|
|
type RolePermission struct {
|
|
RoleID uuid.UUID `json:"role_id"`
|
|
PermissionID uuid.UUID `json:"permission_id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|