Přeskočit obsah

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/roomCategories a /api/rooms nejsou dostupné anonymně.
  • Interní listy místností a kategorií se filtrují podle firmy přihlášeného uživatele.