Přeskočit obsah

Nastavení kalendáře a stavy

Entity: CalendarSettings, AppointmentStatus (tabulky calendar_settings, appointment_statuses)

Prověřeno proti commitu: c9483ac (5. 10. 2026)

Testy: backend/tests/Feature/Audit/NastaveniKalendareStavyAuditTest.php

Routy

Routa Perimetr Ochrana Controller
GET/POST/PUT/DELETE /api/calendarSettings interní oprávnění statuses EntityCrudController CRUD
GET/POST/PUT/DELETE /api/appointmentStatuses interní oprávnění statuses EntityCrudController CRUD
GET /api/public/calendarSettings veřejný alias pro staff staff session EntityCrudController::list
GET /api/public/appointmentStatuses veřejný katalog bez middleware, volitelné public filtry EntityCrudController::publicList

Kdo to volá z Reactu

pages/CalendarSettings.jsx a pages/OperatingHoursSettings.jsx spravují CalendarSettings. pages/AppointmentStatusSettings.jsx spravuje stavy termínů. Calendar.jsx, components/therapist/TherapistCalendarView.jsx a lib/StatusContext.jsx nastavení a stavy čtou pro vykreslení kalendáře. base44Client.js má pro obě entity public fallback.

Opravené nálezy

KAL-04 — Veřejný list stavů termínů není omezený na firmu (střední)

Stav: opravený

Test: KAL-04: veřejný list stavů termínů nevrací stavy jiné firmy

Ověřený fakt — appointmentStatuses 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 appointmentStatuses 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 stavy termínů jiné firmy. Protože stavy ovlivňují zobrazení obsazenosti, plateb a workflow kalendáře, cizí číselník může vést k úniku interní konfigurace i k nekonzistentnímu UI.

KAL-05 — Veřejný list stavů termínů vrací neaktivní stavy (střední)

Stav: opravený

Test: KAL-05: veřejný list stavů termínů nevrací neaktivní stavy

Ověřený fakt — appointmentStatuses povoluje veřejný filtr is_active, ale nemá public_default_filters. Požadavek bez filtru proto vrací aktivní i neaktivní stavy.

Oprava — public list appointmentStatuses má 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 se stavy, které už nemají být nabízené ani viditelné.

Ověřené bez nálezu

  • Interní endpointy /api/calendarSettings a /api/appointmentStatuses nejsou dostupné anonymně.
  • Public alias /api/public/calendarSettings vyžaduje staff session.
  • Interní listy nastavení kalendáře a stavů se filtrují podle firmy přihlášeného uživatele.