Dostupnost¶
Entity: AvailabilityBlock (tabulka availability_blocks)
Funkce: checkAvailabilityConflicts
Prověřeno proti commitu: rozpracováno
Testy: backend/tests/Feature/Audit/DostupnostAuditTest.php
Routy¶
| Routa | Perimetr | Ochrana | Controller |
|---|---|---|---|
GET/POST/PUT/DELETE /api/availabilityBlocks |
interní | oprávnění availability |
EntityCrudController CRUD |
GET /api/public/availabilityBlocks |
veřejný | jen is_public = 1 bez session; staff session vrací firmu |
EntityCrudController::publicList |
POST/PUT/DELETE /api/public/availabilityBlocks |
veřejný staff/terapeut | staff session | EntityCrudController CRUD |
POST /api/public/checkAvailabilityConflicts |
veřejný staff/terapeut | staff session | FunctionsController::checkAvailabilityConflicts |
Opravené nálezy¶
DOS-05 — Terapeut může přes veřejnou routu založit blok jinému terapeutovi (střední)¶
Stav: opraveno
Test: DOS-05: terapeut přes veřejnou routu nespravuje bloky jiného terapeuta
Ověřený fakt — veřejné POST/PUT/DELETE /api/public/availabilityBlocks používají obecný CRUD
se staff session a kontrolou firmy. Neověřují, že terapeut pracuje pouze s vlastním
therapist_id.
Oprava — EntityCrudController při zápisu availabilityBlocks kontroluje roli terapeuta.
Terapeut může vytvořit blok jen se svým therapist_id a upravit/smazat jen existující blok,
který mu patří. Admin a ostatní oprávněné staff role zůstávají beze změny.
Dopad — terapeutický portál může přes API upravit dostupnost kolegy v rámci stejné firmy. U single-firma nasazení nejde o tenant leak, ale o chybějící ownership kontrolu uvnitř týmu.
Ověřené bez nálezu¶
- Interní
/api/availabilityBlocksnení dostupné anonymně. - Veřejný list bez session vrací jen bloky s
is_public = 1. checkAvailabilityConflictsnení dostupné anonymně.checkAvailabilityConflictsporovnává konflikty jen v rámci firmy přihlášeného staff uživatele.