Vai al contenuto

Rilevazione ore per studio di revisione

Rilevazione di progetti e ore del personale per uno studio di revisione · Sviluppato da zero, in autonomia

Aggiornato

Prima

Clienti, progetti e ore stavano in un unico posto dove chiunque nello studio poteva vedere e modificare tutto.

Dopo

87

caselle di permesso verificate sul database prima di ogni deploy; le 30 inutili sono state nascoste.

Come funziona
  1. 1Persona:Titolare

    Crea i ruoli con caselle per area (clienti, progetti, ore, report) per visualizzare, creare, modificare ed eliminare.

  2. 2Persona:Collaboratore

    Registra le ore su cliente, progetto e attività, oppure registra ferie e permessi.

    Software:Web app

    Sollecita chi ha ancora il timesheet vuoto prima della scadenza.

  3. 3Persona:Responsabile di progetto

    Approva o respinge il timesheet settimanale del proprio team di progetto.

  4. 4Software:Database

    Mostra a ciascuno solo ciò che il suo ruolo consente: i collaboratori le proprie ore, i responsabili di progetto il loro team, i titolari ogni cliente.

  5. 5Persona:Titolare

    Legge le ore per cliente, progetto e persona nelle dashboard e nei report.

Sempre attivo

  • Prima, chiunque nello studio poteva aprire ogni cliente e le ore di tutti. Ora il database rifiuta tutto ciò che un ruolo non consente, anche se una schermata lo chiede.
  • Prima di ogni push, ogni ruolo viene testato su una copia isolata del database.

Problema

Uno studio di revisione gestiva clienti, progetti e ore del personale in uno strumento in cui ogni persona poteva aprire ogni cliente e le ore di tutti.

Diagnosi

Il controllo degli accessi cede in silenzio quando vive nella schermata, quindi ogni regola doveva stare nel database, dimostrata da test.

Opzioni valutate

  1. Ogni ruolo vede dati diversi. Dove vivono le regole di accesso?

    Scelta

    Nel database stesso, testate per ogni ruolo prima di ogni deploy

    La schermata non può esporre ciò che il database rifiuta. Costo: un ciclo di test su una copia isolata a ogni push.

    • Scartata

      Solo nelle schermate

      Una persona poteva vedere o modificare dati che la schermata voleva nascondere.

  2. Un record non serve più. Si cancella o si conserva?

    Scelta

    Archiviarlo e anonimizzarlo

    Lo storico dei timesheet resta intatto.

    • Scartata

      Cancellarlo

      Elimina a cascata lo storico dei timesheet.

Soluzione

Una web app single-page su Postgres gestito. Ogni regola di accesso sta nel database ed è dimostrata da una matrice automatica dei ruoli prima di ogni deploy.

App
  • React
  • Vite
  • TanStack Router
  • TanStack Query
  • shadcn/ui
  • Chart.js
Dati e sicurezza
  • Supabase
  • PostgreSQL row-level security
  • Edge Functions (Deno)
Hosting
  • Cloudflare
Qualità
  • GitHub Actions
  • Role-matrix tests
  • Vitest
  • Property-based tests
  • Accessibility tests

Numeri: Controllo automatico dei ruoli, 2026-09-25