Hopp til innhold

Timeføring for revisjonsbyrå

Prosjekt- og timeføring for ansatte i et revisjonsbyrå · Bygget fra bunnen av, alene

Oppdatert

Før

Kunder, prosjekter og timer lå på ett sted der alle i firmaet kunne se og endre alt.

Etter

87

avkrysningsbokser for tillatelser bevist mot databasen før hver utrulling; de 30 som ikke gjorde noe, ble skjult.

Slik fungerer det
  1. 1Person:Eier

    Bygger roller med avkrysningsbokser per område (kunder, prosjekter, tid, rapporter) for visning, oppretting, redigering og sletting.

  2. 2Person:Medarbeider

    Fører timer mot en kunde, et prosjekt og en oppgave, eller registrerer fri.

    Programvare:Nettapp

    Minner alle med tom timeliste om det før fristen.

  3. 3Person:Prosjektadministrator

    Godkjenner eller avviser ukens timeliste for sitt eget prosjektteam.

  4. 4Programvare:Database

    Viser hver person bare det rollen tillater: medarbeidere ser egne timer, prosjektadministratorer teamet sitt, eiere alle kunder.

  5. 5Person:Eier

    Leser timer per kunde, prosjekt og person i dashboardene og rapportene.

Gjelder alltid

  • Før kunne alle i firmaet åpne alle kunder og alles timer. Nå avviser databasen alt en rolle ikke har lov til, selv om et skjermbilde ber om det.
  • Før hver push testes hver rolle mot en isolert kopi av databasen.

Problem

Et revisjonsbyrå førte kunder, prosjekter og medarbeidernes timer i et verktøy der hver person kunne åpne alle kunder og alles tid.

Diagnose

Tilgangskontroll svikter i det stille når den ligger i skjermbildet, så hver regel måtte ligge i databasen og bevises med tester.

Alternativer jeg veide

  1. Hver rolle ser ulike data. Hvor ligger tilgangsreglene?

    Valgt

    I selve databasen, testet for hver rolle før hver utrulling

    Skjermen kan ikke lekke det databasen nekter å gi. Kostnad: en testkjøring på en isolert kopi før hver push.

    • Forkastet

      Bare i skjermbildene

      En person kunne se eller endre data som skjermen skulle skjule.

  2. En post trengs ikke lenger. Slette den eller beholde den?

    Valgt

    Arkivere og anonymisere den

    Timelistehistorikken forblir intakt.

    • Forkastet

      Slette dem

      Sletting fjerner timelistehistorikken i en kaskade.

Løsning

En enkeltsideapp på administrert Postgres. Hver tilgangsregel ligger i databasen og bevises av en automatisk rollematrise før hver utrulling.

App
  • React
  • Vite
  • TanStack Router
  • TanStack Query
  • shadcn/ui
  • Chart.js
Data og sikkerhet
  • Supabase
  • PostgreSQL row-level security
  • Edge Functions (Deno)
Hosting
  • Cloudflare
Kvalitet
  • GitHub Actions
  • Role-matrix tests
  • Vitest
  • Property-based tests
  • Accessibility tests

Tall: Automatisk rollekontroll, 2026-09-25