Přejít na obsah

Evidence času pro auditorskou firmu

Evidence času projektů a zaměstnanců pro auditorskou firmu · Vytvořeno od základu, samostatně

Aktualizováno

Před

Klienti, projekty a hodiny žily na jednom místě, kde mohl každý ve firmě všechno vidět a měnit.

Po

87

zaškrtávací pole oprávnění ověřená proti databázi před každým nasazením; 30 polí, která nic nedělala, bylo skryto.

Jak to funguje
  1. 1Člověk:Vlastník

    Vytváří role pomocí zaškrtávacích polí pro každou oblast (klienti, projekty, čas, reporty) a pro zobrazení, vytvoření, úpravu a smazání.

  2. 2Člověk:Zaměstnanec

    Zapisuje hodiny ke klientovi, projektu a úkolu nebo si zadává volno.

    Software:Webová aplikace

    Připomene každému, kdo má před termínem stále prázdný výkaz, že ho má vyplnit.

  3. 3Člověk:Správce projektu

    Schvaluje nebo zamítá týdenní výkaz pro tým svého projektu.

  4. 4Software:Databáze

    Ukáže každému jen to, co jeho role dovoluje: zaměstnanci vidí vlastní hodiny, správci projektů svůj tým, vlastníci všechny klienty.

  5. 5Člověk:Vlastník

    Čte hodiny podle klienta, projektu a osoby v dashboardech a reportech.

Vždy platí

  • Dříve mohl každý ve firmě otevřít každého klienta i hodiny všech ostatních. Nyní databáze odmítne vše, co role nedovoluje, i když o to obrazovka požádá.
  • Před každým pushem se každá role testuje na izolované kopii databáze.

Problém

Auditorská firma vedla klienty, projekty a hodiny zaměstnanců v nástroji, kde mohl každý otevřít každého klienta i čas všech ostatních.

Diagnóza

Řízení přístupu selhává nenápadně, když žije jen v rozhraní, takže každé pravidlo muselo žít v databázi a být prokázané testy.

Varianty, které jsem zvažoval

  1. Každá role vidí jiná data. Kde žijí pravidla přístupu?

    Zvoleno

    Přímo v databázi, otestovaná pro každou roli před každým nasazením

    Obrazovka nemůže prozradit to, co databáze odmítne vydat. Cena: testovací běh na izolované kopii před každým pushem.

    • Zamítnuto

      Jen v obrazovkách

      Člověk mohl vidět nebo měnit data, která měla obrazovka skrýt.

  2. Záznam už není potřeba. Smazat ho, nebo ponechat?

    Zvoleno

    Archivovat a anonymizovat

    Historie výkazů zůstane neporušená.

    • Zamítnuto

      Smazat

      Smazání kaskádově odstraní historii výkazů.

Řešení

Jednostránková webová aplikace na spravovaném Postgresu. Každé pravidlo přístupu žije v databázi a před každým nasazením je prokázáno automatickou maticí rolí.

Aplikace
  • React
  • Vite
  • TanStack Router
  • TanStack Query
  • shadcn/ui
  • Chart.js
Data a zabezpečení
  • Supabase
  • PostgreSQL row-level security
  • Edge Functions (Deno)
Hosting
  • Cloudflare
Kvalita
  • GitHub Actions
  • Role-matrix tests
  • Vitest
  • Property-based tests
  • Accessibility tests

Čísla: Automatická kontrola rolí, 2026-09-25