Místnosti¶
Entity: Room, RoomCategory (tabulky rooms, room_categories)
Prověřeno proti commitu: c1d5767 (5. 10. 2026)
Testy: backend/tests/Feature/Audit/MistnostiAuditTest.php
Routy¶
| Routa | Perimetr | Ochrana | Controller |
|---|---|---|---|
GET/POST/PUT/DELETE /api/roomCategories |
interní | oprávnění availability |
EntityCrudController CRUD |
GET/POST/PUT/DELETE /api/rooms |
interní | oprávnění availability |
EntityCrudController CRUD |
GET /api/public/roomCategories |
veřejný katalog | bez middleware, volitelné public filtry | EntityCrudController::publicList |
GET /api/public/rooms |
veřejný katalog | bez middleware, volitelné public filtry | EntityCrudController::publicList |
Kdo to volá z Reactu¶
pages/RoomCategorySettings.jsx spravuje kategorie i místnosti. Calendar.jsx,
AvailabilityManagement.jsx, TherapistPortal.jsx, RoomOccupancyStats.jsx a navazující
kalendářové komponenty čtou seznam místností a kategorií. base44Client.js má pro Room
i RoomCategory veřejný fallback na /api/public/rooms a /api/public/roomCategories.
Opravené nálezy¶
MIS-03 — Veřejný list kategorií místností není omezený na firmu (nízká)¶
Stav: opravený
Test: MIS-03: veřejný list kategorií místností nevrací kategorie jiné firmy
Ověřený fakt — roomCategories má public_list => true, ale nemá public_company_scope.
Veřejný list tak bez session skládá dotaz bez company_id omezení.
Oprava — public list roomCategories používá tenant scope. Bez staff session se
v single-tenant režimu omezí na první aktivní firmu.
Dopad — veřejný nebo fallback klient může dostat kategorie místností jiné firmy. Jde hlavně o únik interní konfigurace a o riziko, že UI začne filtrovat podle cizích kategorií.
MIS-04 — Veřejný list místností není omezený na firmu (střední)¶
Stav: opravený
Test: MIS-04: veřejný list místností nevrací místnosti jiné firmy
Ověřený fakt — rooms má public_list => true, ale nemá public_company_scope.
Veřejný list tak bez session skládá dotaz bez company_id omezení.
Oprava — public list rooms používá tenant scope. Bez staff session se v single-tenant
režimu omezí na první aktivní firmu.
Dopad — veřejný nebo fallback klient může získat názvy, kapacity a přiřazení místností jiné firmy. Protože místnosti vstupují do dostupnosti a kalendáře, chybný veřejný katalog může vést i k nekonzistentnímu plánování na frontendu.
MIS-05 — Veřejný list místností a kategorií vrací neaktivní záznamy (střední)¶
Stav: opravený
Test: MIS-05: veřejný list místností a kategorií nevrací neaktivní záznamy
Ověřený fakt — rooms i roomCategories povolují veřejný filtr is_active, ale nemají
public_default_filters. Požadavek bez filtru proto vrací aktivní i neaktivní záznamy.
Oprava — public listy rooms a roomCategories mají výchozí filtr is_active = 1.
Explicitní public filtry mohou výsledek dál zúžit.
Dopad — klientské a kalendářové obrazovky mohou přes public fallback pracovat s místnostmi, které už nemají být nabízené ani viditelné.
Ověřené bez nálezu¶
- Interní endpointy
/api/roomCategoriesa/api/roomsnejsou dostupné anonymně. - Interní listy místností a kategorií se filtrují podle firmy přihlášeného uživatele.