Gå til indhold

Tidsregistrering for revisionsfirma

Tidsregistrering for projekter og medarbejdere i et revisionsfirma · Bygget fra bunden, alene

Opdateret

Før

Kunder, projekter og timer lå ét sted, hvor alle i firmaet kunne se og ændre alt.

Efter

87

tilladelsesfelter bevist mod databasen før hver udrulning; de 30, der intet gjorde, blev skjult.

Sådan fungerer det
  1. 1Menneske:Ejer

    Opretter roller med afkrydsningsfelter pr. område (kunder, projekter, tid, rapporter) for visning, oprettelse, redigering og sletning.

  2. 2Menneske:Medarbejder

    Registrerer timer på en kunde, et projekt og en opgave eller booker fri.

    System:Webapp

    Minder enhver, hvis tidsregistrering stadig er tom, inden fristen.

  3. 3Menneske:Projektadministrator

    Godkender eller afviser ugens tidsregistrering for sit eget projektteam.

  4. 4System:Database

    Viser hver person kun det, rollen tillader: medarbejdere ser deres egne timer, projektadministratorer deres team, ejere alle kunder.

  5. 5Menneske:Ejer

    Læser timer pr. kunde, projekt og person i dashboards og rapporter.

Gælder altid

  • Før kunne alle i firmaet åbne alle kunder og alles timer. Nu afviser databasen alt, hvad en rolle ikke må, selv hvis brugerfladen beder om det.
  • Før hvert push testes hver rolle mod en isoleret kopi af databasen.

Problem

Et revisionsfirma styrede kunder, projekter og medarbejdertimer i et værktøj, hvor enhver kunne åbne alle kunder og alles tid.

Diagnose

Adgangskontrol svigter ubemærket, når den ligger i brugerfladen, så hver regel skulle ligge i databasen og bevises med tests.

Overvejede muligheder

  1. Hver rolle ser forskellige data. Hvor ligger adgangsreglerne?

    Valgt

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

    Brugerfladen kan ikke lække det, databasen nægter. Pris: en testkørsel på en isoleret kopi før hvert push.

    • Fravalgt

      Kun i brugerfladen

      En person kunne se eller ændre data, som brugerfladen skulle skjule.

  2. En post er ikke længere nødvendig. Skal den slettes eller beholdes?

    Valgt

    Arkivér og anonymisér den

    Tidsregistreringens historik forbliver intakt.

    • Fravalgt

      Slet den

      Sletning trækker tidsregistreringens historik med sig.

Løsning

En single-page webapp på administreret Postgres. Hver adgangsregel ligger i databasen og bevises af en automatisk rollematrix før hver udrulning.

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

Nøgletal: Automatisk rolletjek, 2026-09-25