Přeskočit obsah

Finance klienta

Entity: ClientCredit, ClientPackage, CreditTransaction (tabulky client_credits, client_packages, credit_transactions)

Funkce: clientBooking — akce topup_credit, purchase_package

Prověřeno proti commitu: rozpracováno

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

Routy

Routa Perimetr Ochrana Controller
GET/POST/PUT/DELETE /api/clientCredits interní oprávnění payments EntityCrudController CRUD
GET/POST/PUT/DELETE /api/clientPackages interní oprávnění payments EntityCrudController CRUD
GET/POST/PUT/DELETE /api/creditTransactions interní oprávnění payments EntityCrudController CRUD
GET /api/public/clientCredits veřejný klientský klientská session a filtr client_id EntityCrudController::publicList
GET /api/public/clientPackages veřejný klientský klientská session a filtr client_id EntityCrudController::publicList
GET /api/public/creditTransactions veřejný klientský klientská session a filtr client_id EntityCrudController::publicList
POST /api/public/clientBooking topup_credit veřejný klientský / staff staff nebo klientská session FunctionsController::bookingTopupCredit
POST /api/public/clientBooking purchase_package veřejný klientský / staff staff nebo klientská session FunctionsController::bookingPurchasePackage

Opravené nálezy

FIN-04 — Veřejné finanční listy vrací interní identifikátor firmy (nízká)

Stav: opraveno

Test: FIN-04: veřejné finanční listy nevrací interní identifikátor firmy

Ověřený fakt — veřejné listy klientských financí používají obecný SELECT *, company_id AS company_account_id a sanitizace pro clientCredits, clientPackages a creditTransactions zatím neodstraňuje company_account_id.

Oprava — public sanitizace pro clientCredits, clientPackages a creditTransactions odstraňuje company_account_id před odesláním klientské odpovědi.

Dopad — klientské API vrací interní tenant identifikátor. Nejde o přímé zpřístupnění obsahu cizí firmy, ale je to zbytečný interní údaj na veřejném perimetru.

Nálezy

FIN-05 — Klient si může veřejnou akcí dobít demo kredit (vysoká)

Stav: otevřený

Test: FIN-05: klient si veřejnou akcí topup_credit nedobije demo kredit

Ověřený fakt — topup_credit přijme klientskou session stejného klienta a výchozí platební metoda je demo. Pro demo nevzniká vazba na platební bránu ani povinný externí identifikátor platby, ale kredit je navýšen a vznikne platební záznam.

Dopad — pokud je klientský portál veřejně dostupný, přihlášený klient si může navýšit kredit bez skutečné úhrady. Produkční dobití by mělo být omezené na staff nebo na ověřený návrat z platební brány; demo metoda by neměla být dostupná klientskému perimetru mimo testovací režim.

Ověřené bez nálezu

  • Interní endpointy /api/clientCredits, /api/clientPackages a /api/creditTransactions nejsou dostupné anonymně.
  • Klientské veřejné listy vyžadují session stejného klienta jako filtr client_id.
  • Veřejný list klientských financí bez filtru client_id vrací 401.
  • purchase_package nezakoupí balíček pro cizího klienta.