User Service

Třída Moony\bootstrap\core\services\User je plně statická a řeší autentizaci, registraci, session management a uživatelská data. Konfigurace v sekci user configu.

Kontrola přihlášení

User::isLogged()Vrátí true pokud je uživatel přihlášen
User::getId()ID přihlášeného uživatele nebo null
User::get(string $column)Hodnota sloupce z tabulky users (email, first_name, ...)
User::getDisplayableName()Jméno + příjmení, nebo username z emailu
User::isAdmin()Je uživatel admin (nebo super admin)
User::isSuperAdmin()Je uživatel super admin
User::hasAdminRight(AdminRightsEnum $right)Má uživatel konkrétní admin právo
if(User::isLogged()) {
    $email = User::get('email');
    $name = User::getDisplayableName();
}

if(User::hasAdminRight(AdminRightsEnum::USERS_VIEW)) {
    // ...
}

Login

try {
    User::login(['email' => $email], $password);
    redirect(config('user', 'home', 'url'));
}catch(UserNotFoundException $e) {
    // uživatel nenalezen
}catch(IncorrectPasswordException $e) {
    // špatné heslo
}catch(EmailNotVerifiedException $e) {
    // email neověřen
}catch(UserBlockedException $e) {
    // účet zablokován
}

Metoda User::login() přijímá pole kritérií (typicky email) a heslo. Při úspěchu vytvoří session (64-znakový token v cookie) a zaznamená login do logu.

Výjimky

UserNotFoundExceptionUživatel s danými kritérii neexistuje
IncorrectPasswordExceptionHeslo nesouhlasí
EmailNotVerifiedExceptionEmail dosud neověřen (pokud je zapnutá verifikace)
UserBlockedExceptionÚčet je zablokován

Registrace a správa

User::create(string $email, string $password, array $data = [])Vytvoří uživatele. Heslo se hashuje BCRYPT (cost 12). Vrátí ID.
User::update(array $data)Aktualizuje přihlášeného uživatele. Heslo se automaticky hashuje.
User::passwordReset(string $newPassword, int $userId)Resetuje heslo konkrétnímu uživateli
User::verifyRegistration(int $userId)Potvrdí email (nastaví email_verified_at)
User::logout()Odhlásí uživatele, smaže session. Pokud byl přihlášen jako admin-impersonace, vrátí se na admin účet.
// Registrace
$userId = User::create('user@example.com', 'password123', [
    'first_name' => 'Jan',
    'last_name' => 'Novák'
]);

// Aktualizace profilu
User::update([
    'first_name' => 'Jan',
    'timezone' => 'Europe/Prague'
]);

Session management

Přihlášení generuje unikátní 64-znakový session token uložený v cookie SESSION. Platnost session se řídí konfigurací config('user', 'login', 'validityInDays').

Při každém page loadu se volá User::boot() (jako boot class), který ověří session cookie a obnoví uživatelská data. Expirované session se automaticky recyklují.

Logování

// Zaznamenání uživatelské akce
User::log(UserEventsLogEnum::UPDATED, [
    'email' => $newEmail
], [
    'email' => $oldEmail  // staré hodnoty pro porovnání
]);