Pereiti prie turinio

Audito įmonės laiko apskaita

Audito įmonės projektų ir darbuotojų laiko apskaita · Sukurta nuo nulio, dirbant vienam

Atnaujinta

Prieš

Klientai, projektai ir valandos buvo vienoje vietoje, kur visi įmonėje galėjo viską matyti ir keisti.

Po

87

leidimų langelių, įrodytų su duomenų baze prieš kiekvieną diegimą; 30, kurie nieko nedarė, paslėpti.

Kaip tai veikia
  1. 1Žmogus:Savininkas

    Kuria roles su žymimaisiais langeliais kiekvienai sričiai (klientai, projektai, laikas, ataskaitos) peržiūrai, kūrimui, redagavimui ir ištrynimui.

  2. 2Žmogus:Darbuotojas

    Registruoja valandas pagal klientą, projektą ir užduotį arba pasižymi laisvadienį.

    Programinė įranga:Žiniatinklio programa

    Primena kiekvienam, kurio laiko žiniaraštis prieš terminą vis dar tuščias.

  3. 3Žmogus:Projekto administratorius

    Tvirtina arba atmeta savaitės laiko žiniaraštį savo projekto komandai.

  4. 4Programinė įranga:Duomenų bazė

    Parodo kiekvienam tik tai, ką leidžia jo rolė. Darbuotojai mato savo valandas, projektų administratoriai savo komandą, savininkai visus klientus.

  5. 5Žmogus:Savininkas

    Skaito valandas pagal klientą, projektą ir asmenį dashboard'uose ir ataskaitose.

Veikia visada

  • Anksčiau kiekvienas įmonėje galėjo atidaryti bet kurį klientą ir visų valandas. Dabar duomenų bazė atmeta viską, ko rolė neleidžia, net jei to prašo ekranas.
  • Prieš kiekvieną kodo įkėlimą (push) kiekviena rolė yra išbandoma izoliuotoje duomenų bazės kopijoje.

Problema

Audito įmonė vedė klientus, projektus ir darbuotojų valandas įrankyje, kuriame kiekvienas galėjo atidaryti bet kurį klientą ir visų žmonių laiką.

Diagnozė

Prieigos kontrolė tyliai sugenda, kai ji įgyvendinta ekrane, todėl kiekviena taisyklė turėjo būti duomenų bazėje ir įrodyta testais.

Svarstyti variantai

  1. Kiekviena rolė mato skirtingus duomenis. Kur saugomos prieigos taisyklės?

    Pasirinkta

    Pačioje duomenų bazėje, išbandytos kiekvienai rolei prieš kiekvieną diegimą

    Ekranas negali nutekinti to, ko duomenų bazė neleidžia. Kaina: testų paleidimas izoliuotoje kopijoje prieš kiekvieną kodo įkėlimą (push).

    • Atmesta

      Tik ekranuose

      Žmogus galėjo pamatyti ar pakeisti duomenis, kuriuos ekranas turėjo paslėpti.

  2. Įrašas nebereikalingas. Ar jį ištrinti, ar saugoti toliau?

    Pasirinkta

    Suarchyvuoti ir anonimizuoti

    Laiko žiniaraščių istorija lieka nepaliesta.

    • Atmesta

      Ištrinti

      Ištrynimas kaskadiškai sunaikina laiko žiniaraščių istoriją.

Sprendimas

Vieno puslapio žiniatinklio programa valdomame Postgres. Kiekviena prieigos taisyklė apibrėžta duomenų bazėje ir prieš kiekvieną diegimą įrodoma automatine rolių matrica.

Programa
  • React
  • Vite
  • TanStack Router
  • TanStack Query
  • shadcn/ui
  • Chart.js
Duomenys ir sauga
  • Supabase
  • PostgreSQL row-level security
  • Edge Functions (Deno)
Talpinimas
  • Cloudflare
Kokybė
  • GitHub Actions
  • Role-matrix tests
  • Vitest
  • Property-based tests
  • Accessibility tests

Skaičiai: Automatinis rolių patikrinimas, 2026-09-25