Uživatelé a terapeuti¶
Entity: DemoUser / users, Therapist / users s rolí therapist
Funkce: interní správa uživatelů, interní správa terapeutů, veřejný list terapeutů
Prověřeno proti commitu: rozpracováno
Testy: backend/tests/Feature/Audit/UzivateleTerapeutiAuditTest.php
Routy¶
| Routa | Perimetr | Ochrana | Controller |
|---|---|---|---|
GET/POST/PUT/DELETE /api/users |
interní | role admin |
UserController |
GET/POST/PUT/DELETE /api/therapists |
interní | oprávnění therapists |
UserController |
GET /api/public/therapists |
veřejný katalog | bez middleware | UserController::publicListTherapists |
GET /api/getUser |
interní identita | staff session + plan middleware | UserController::userData |
PUT /api/updateMe |
interní profil / nastavení firmy | staff session | UserController::updateMe |
POST /api/auth/passkey/invite |
interní passkey pozvánka | role admin |
AuthController::sendPasskeyInvite |
Opravené nálezy¶
USR-03 — Admin seznam uživatelů vrací uživatele všech firem (vysoká)¶
Stav: opraveno
Test: USR-03: admin seznam uživatelů nevrací uživatele jiné firmy
Ověřený fakt — UserController::list() pro uživatele vyhodnoceného jako admin spustí
dotaz bez company_id filtru. AuthMiddleware přitom považuje company_role =
company_admin za aplikační roli admin, takže běžný firemní administrátor projde na
/api/users.
Dopad — administrátor jedné firmy může přes interní endpoint vidět e-maily, telefony, role a stav zaměstnanců jiných firem.
Oprava — UserController::list() vždy filtruje podle company_id aktuálně
přihlášeného uživatele.
USR-05 — Veřejný seznam terapeutů není omezený na firmu (střední)¶
Stav: opraveno
Test: USR-05: veřejný seznam terapeutů nevrací terapeuty jiné firmy
Ověřený fakt — UserController::publicListTherapists() vybírá všechny aktivní záznamy
s rolí therapist bez tenantového filtru.
Dopad — klientské a veřejné stránky mohou zobrazit terapeuty jiné firmy. V kombinaci s veřejným rezervačním portálem to může vést ke smíchání katalogu napříč tenanty.
Oprava — veřejný seznam terapeutů používá stejný single-tenant public scope jako
veřejné katalogové endpointy: první aktivní firmu podle companies.id.
USR-06 — Veřejný seznam terapeutů vrací interní kontakty a portálová pole (vysoká)¶
Stav: opraveno
Test: USR-06: veřejný seznam terapeutů nevrací interní kontakty a portálová pole
Ověřený fakt — veřejná routa používá stejný therapistSelectSql() a
formatTherapistEntity() jako interní správa. Odpověď tak obsahuje například email,
phone, portal_user_email, portal_access_enabled, microsoft_calendar_email a
microsoft_calendar_id.
Dopad — anonymní návštěvník veřejného portálu získá interní kontakty a provozní údaje terapeutů, které nejsou nutné pro výběr termínu.
Oprava — veřejná odpověď používá samostatný formatter s allowlistem veřejných polí.
Ověřené bez nálezu¶
- Interní
/api/usersa/api/therapistsnejsou dostupné anonymně. - Neadmin nevytvoří uživatele ani terapeuta.
- Interní
/api/therapistsvrací jen terapeuty aktuální firmy. - Existující feature testy ověřují vytvoření terapeuta adminem a odmítnutí vytvoření bez e-mailu.