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
| UserNotFoundException | Uživatel s danými kritérii neexistuje |
| IncorrectPasswordException | Heslo nesouhlasí |
| EmailNotVerifiedException | Email 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í
]);
