Přeskočit obsah

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/users a /api/therapists nejsou dostupné anonymně.
  • Neadmin nevytvoří uživatele ani terapeuta.
  • Interní /api/therapists vrací jen terapeuty aktuální firmy.
  • Existující feature testy ověřují vytvoření terapeuta adminem a odmítnutí vytvoření bez e-mailu.