Přihlášení zaměstnanců¶
Funkce: login, passkey, invitations, refresh, logout
Prověřeno proti commitu: rozpracováno
Testy: backend/tests/Feature/Audit/PrihlaseniZamestnancuAuditTest.php
Routy¶
| Routa | Perimetr | Ochrana | Controller |
|---|---|---|---|
POST /api/login |
veřejný staff login | jen při STAFF_PASSWORD_LOGIN_ENABLED=true |
AuthController::login |
POST /api/login/request |
veřejný legacy magic-link start | jen při STAFF_MAGIC_LINK_ENABLED=true |
AuthController::request |
POST /api/loginTokens/{token} |
veřejný legacy magic-link callback | jen při STAFF_MAGIC_LINK_ENABLED=true |
AuthController::verify |
GET /api/auth/passkey/login |
veřejný passkey start | redirect na centrální auth | AuthController::passkeyLogin |
GET/POST /api/auth/passkey/callback |
veřejný passkey callback | JWT z centrálního auth serveru | AuthController::passkeyCallback |
POST /api/auth/refresh |
veřejný session refresh | refresh cookie | AuthController::refresh |
POST /api/auth/logout |
veřejný logout | access nebo refresh cookie | AuthController::logout |
GET /api/invitations/{token} |
veřejný náhled pozvánky | invitation token | AuthController::getInvitation |
POST /api/invitations/{token}/complete |
veřejné dokončení pozvánky | invitation token | AuthController::completeInvitation |
GET /api/auth/passkey/manage |
interní správa passkeys | staff session | AuthController::passkeyManage |
POST /api/auth/passkey/invite |
interní passkey pozvánka | admin role | AuthController::sendPasskeyInvite |
Opravené nálezy¶
AUTH-STAFF-05 — Invitation token lze po dokončení zkusit použít znovu (střední)¶
Stav: opraveno
Test: AUTH-STAFF-05: použitý invitation token nezaloží další účet
Ověřený fakt — AuthController::completeInvitation() kontroluje nepoužitost přes
used_at, ale tabulka invitations má stav dokončení ve sloupci accepted_at.
Stejná metoda po založení účtu zapisuje accepted_at = NOW().
Oprava — dokončení pozvánky kontroluje accepted_at, tedy stejný stavový sloupec,
který se po úspěšném založení účtu nastavuje.
Dopad — použitý invitation token není odmítnutý na stavové kontrole. Opakované volání
se stejným e-mailem narazí až na unikátní omezení users.email, tedy na chybový stav mimo
řízenou aplikační odpověď. Pokud by se později změnila unikátnost uživatelů, stejná chyba
by mohla založit další účet ze stejné pozvánky.
Ověřené bez nálezu¶
- Legacy password login je ve výchozím testovacím nastavení vypnutý a nezakládá session.
- Passkey callback nevytvoří session pro neaktivního uživatele.
- Refresh odmítne session, jejíž uživatel byl po přihlášení deaktivován.
- Logout zneplatní session i tehdy, když request obsahuje jen refresh cookie.
- Passkey callback kontroluje audience JWT už v existující feature sadě.
- Terapeut bez
portal_access_enablednedostane staff session přes passkey callback už v existující feature sadě.