Právní dokumenty¶
Entity: LegalDocument (tabulka legal_documents)
Prověřeno proti commitu: c9483ac (5. 10. 2026)
Testy: backend/tests/Feature/Audit/PravniDokumentyAuditTest.php
Routy¶
| Routa | Perimetr | Ochrana | Controller |
|---|---|---|---|
GET/POST/PUT/DELETE /api/legalDocuments |
interní | oprávnění systémových nastavení | EntityCrudController CRUD |
GET /api/public/legalDocuments |
veřejný klientský | bez middleware, volitelné public filtry | EntityCrudController::publicList |
Kdo to volá z Reactu¶
pages/LegalDocumentsSettings.jsx spravuje VOP a GDPR dokumenty. components/client/ClientOnboarding.jsx
čte aktivní dokumenty přes LegalDocument.filter({ is_active: true }) a zobrazuje je klientovi
při onboardingu před potvrzením souhlasů.
Opravené nálezy¶
LEG-03 — Veřejný list právních dokumentů není omezený na firmu (vysoká)¶
Stav: opravený
Test: LEG-03: veřejný list právních dokumentů nevrací dokumenty jiné firmy
Ověřený fakt — legalDocuments 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 legalDocuments používá tenant scope. Bez staff session se
v single-tenant režimu omezí na první aktivní firmu.
Dopad — klient může při onboardingu dostat VOP nebo GDPR text jiné firmy. U právních dokumentů nejde jen o únik obsahu, ale i o riziko neplatného nebo špatně evidovaného souhlasu.
LEG-04 — Veřejný list právních dokumentů vrací neaktivní dokumenty (střední)¶
Stav: opravený
Test: LEG-04: veřejný list právních dokumentů nevrací neaktivní dokumenty
Ověřený fakt — legalDocuments povoluje veřejný filtr is_active, ale nemá
public_default_filters. Požadavek bez filtru proto vrací aktivní i neaktivní verze dokumentů.
Oprava — public list legalDocuments má výchozí filtr is_active = 1.
Explicitní public filtry mohou výsledek dál zúžit.
Dopad — klientské UI může zobrazit zastaralé nebo vyřazené znění právního dokumentu, pokud public fallback nepředá filtr nebo pokud vznikne jiné veřejné volání bez filtru.
LEG-05 — Veřejný list právních dokumentů vrací interní identifikátor firmy (nízká)¶
Stav: opravený
Test: LEG-05: veřejný list právních dokumentů nevrací interní identifikátor firmy
Ověřený fakt — obecný public list vybírá SELECT *, company_id AS company_account_id
a sanitizace pro legalDocuments company_account_id neodstraňuje.
Oprava — public sanitizace pro legalDocuments odstraňuje company_account_id
před odesláním odpovědi.
Dopad — veřejná odpověď obsahuje interní tenant identifikátor, který klient nepotřebuje. Samostatně nejde o zásah do dat, ale zbytečně odhaluje vnitřní strukturu systému.
Ověřené bez nálezu¶
- Interní endpoint
/api/legalDocumentsnení dostupný anonymně. - Interní list právních dokumentů se filtruje podle firmy přihlášeného uživatele.