Hoppa till innehållet

Tidredovisning för revisionsbyrå

Tidredovisning för projekt och personal på en revisionsbyrå · Byggt från grunden, solo

Uppdaterad

Före

Kunder, projekt och timmar fanns på ett ställe där alla på byrån kunde se och ändra allt.

Efter

87

behörighetsrutor bevisade mot databasen före varje driftsättning; de 30 som inte gjorde något doldes.

Så fungerar det
  1. 1Person:Ägare

    Bygger roller med kryssrutor per område (kunder, projekt, tid, rapporter) för att visa, skapa, redigera och radera.

  2. 2Person:Medarbetare

    Loggar timmar mot en kund, ett projekt och en uppgift, eller bokar ledighet.

    Programvara:Webbapp

    Påminner alla vars tidrapport fortfarande är tom före deadline.

  3. 3Person:Projektadmin

    Godkänner eller avslår veckans tidrapport för det egna projektteamet.

  4. 4Programvara:Databas

    Visar varje person bara det rollen tillåter: medarbetare ser sina egna timmar, projektadmins sitt team, ägare alla kunder.

  5. 5Person:Ägare

    Läser timmar per kund, projekt och person i dashboards och rapporter.

Alltid på

  • Tidigare kunde alla på byrån öppna varje kund och allas timmar. Nu vägrar databasen allt som en roll inte tillåts, även om en skärm ber om det.
  • Före varje push testas varje roll mot en isolerad kopia av databasen.

Problem

En revisionsbyrå hanterade sina kunder, projekt och personaltimmar i ett verktyg där alla kunde öppna varje kund och allas tid.

Diagnos

Åtkomstkontroll havererar tyst när den ligger i skärmen, så varje regel måste ligga i databasen och bevisas med tester.

Alternativ jag vägde

  1. Varje roll ser olika data. Var ska åtkomstreglerna ligga?

    Valt

    I själva databasen, testade för varje roll före varje driftsättning

    Skärmen kan inte läcka det databasen vägrar lämna ut. Kostnad: en testkörning på en isolerad kopia före varje push.

    • Bortvalt

      Bara i skärmarna

      Någon kunde se eller ändra data som skärmen försökte dölja.

  2. En post behövs inte längre. Ska den raderas eller sparas?

    Valt

    Arkivera och anonymisera den

    Tidrapporteringens historik förblir hel.

    • Bortvalt

      Radera den

      Radering tar med sig tidrapporternas historik.

Lösning

En ensidesapp på hanterad Postgres. Varje åtkomstregel ligger i databasen och bevisas av en automatisk rollmatris före varje driftsättning.

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

Siffror: Automatisk rollkontroll, 2026-09-25