DD-011: make Google login the only way in

Remove the free player selection from /benvenuto: without a Supabase session
no screen renders, and the VITE_AUTH_OBBLIGATORIA bridge flag is gone.
Admin rights now come only from user_roles, so the hardcoded name list in
crapp-data.ts is deleted along with its tests.

Add migration m4_solo_autenticati, which revokes anon access to the v1.0
tables. Apply it only once the whole team has linked an account.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-31 18:21:34 +02:00
co-authored by Claude Opus 5
parent f325c0485c
commit 1036eb860d
13 changed files with 78 additions and 143 deletions
+4 -4
View File
@@ -46,10 +46,10 @@ docs/ documentazione ufficiale
generato) e `client.server.ts` (`supabaseAdmin`, solo server). `types.ts` è generato dallo
schema; finché non viene rigenerato, le tabelle introdotte da M1/M2 si usano tramite
`client-nuove-tabelle.ts`, con i tipi di riga dichiarati nei moduli di `src/lib/`.
- **Autenticazione**: login Google via Supabase Auth (`src/lib/auth.ts`, DD-011); i permessi
di amministrazione arrivano da `user_roles` (`src/lib/ruoli.ts`). La variabile
`VITE_AUTH_OBBLIGATORIA` decide se `/benvenuto` accetta ancora la selezione libera del
giocatore: finché è spenta, login e vecchio accesso convivono.
- **Autenticazione**: login Google via Supabase Auth (`src/lib/auth.ts`, DD-011). È l'unica
strada di accesso: `__root.tsx` rimanda a `/benvenuto` chi non ha sessione, e l'identità
del giocatore è lo slot di `giocatori_squadra` collegato all'account. I permessi di
amministrazione arrivano solo da `user_roles` (`src/lib/ruoli.ts`).
## Livello dati
+9 -3
View File
@@ -11,9 +11,15 @@ qui: sta in [ROADMAP.md](ROADMAP.md).
- Login con Google tramite Supabase Auth (DD-011). Al primo accesso l'account si collega a
un giocatore di `giocatori_squadra`, e il collegamento non è più modificabile dal
giocatore stesso (DD-016 regola 2).
- I permessi di amministrazione arrivano da `user_roles` (`src/lib/ruoli.ts`) e non più
dalla lista di nomi in `crapp-data.ts`, che resta solo come ponte finché
`VITE_AUTH_OBBLIGATORIA` non viene acceso.
- La selezione libera del giocatore è stata rimossa: `/benvenuto` offre solo l'accesso con
Google e senza sessione non si entra in nessuna schermata. Sparita anche la variabile
`VITE_AUTH_OBBLIGATORIA` (non serve più) e il pulsante «Cambia giocatore» in `/profilo`.
- I permessi di amministrazione arrivano solo da `user_roles` (`src/lib/ruoli.ts`): la lista
di nomi in `crapp-data.ts` è stata eliminata, altrimenti bastava scegliere il nome giusto
per amministrare.
- Migration `m4_solo_autenticati`: toglie al ruolo `anon` l'accesso alle tabelle v1.0.
**Da applicare solo a squadra collegata**, altrimenti chi non ha ancora fatto login vede
l'app vuota.
- Profilo giocatore: da `/profilo` ognuno compila i propri dati anagrafici e carica
documento, certificato medico e foto tessera con le relative scadenze
([modules/profilo-giocatore.md](modules/profilo-giocatore.md)).
+5 -7
View File
@@ -6,13 +6,11 @@ Solo il lavoro in corso o imminente. L'elenco completo delle funzionalità previ
## In corso
- Documentazione tecnica del progetto.
- Autenticazione Google e dashboard amministratore: implementate su `develop`, ma in dev il
login risponde ancora `provider is not enabled` perché il provider Google non è stato
acceso in Supabase. Restano da
fare, in quest'ordine: configurazione del provider Google in Supabase, applicazione delle
migration M2/M3, inserimento del primo admin in `user_roles`, collegamento dei 17 account,
e solo alla fine `VITE_AUTH_OBBLIGATORIA=true` + rimozione delle policy `anon`.
Stato di dettaglio in [PROJECT_STATE.md](../PROJECT_STATE.md).
- Autenticazione Google e dashboard amministratore: il codice è completo su `develop` e il
login è ora l'unica via d'accesso. Restano i passaggi di configurazione, in quest'ordine:
provider Google in Supabase (senza, nessuno entra), migration M2/M3, primo admin in
`user_roles`, collegamento dei 17 account, e infine la migration M4 che chiude gli accessi
`anon`. Stato di dettaglio in [PROJECT_STATE.md](../PROJECT_STATE.md).
## Prossimo