Přeskočit obsah

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/availabilityBlocks není dostupné anonymně.
  • Veřejný list bez session vrací jen bloky s is_public = 1.
  • checkAvailabilityConflicts není dostupné anonymně.
  • checkAvailabilityConflicts porovnává konflikty jen v rámci firmy přihlášeného staff uživatele.