Přeskočit obsah

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/legalDocuments není dostupný anonymně.
  • Interní list právních dokumentů se filtruje podle firmy přihlášeného uživatele.