Registrazione - Gestione Utenti

Salve a tutti,

Mi piacerebbe avere la vostra opinione sul seguente problema di gestione degli utenti, e come implementarlo con Yii.

Ho una webapp che ha tre tipi di utenti:

  1. Utente lettore di contenuti, di cui devo memorizzare i campi della tabella_1

  2. Utente scrittore di contenuti di cui devo memorizzare i campi della tabella_2

  3. Utente amministratore, di cui devo memorizzare solo login e password

Vorrei ovviamente che ogni utente dopo il login veda il proprio "ambiente" e abbia i propri permessi.

Vorrei inoltre personalizzare la registrazione proponendo i campi di tabella_1 e tabella_2 come alternativi tra di loro dopo che l’utente ha espresso il tipo di profilo.

Avete idee o suggerimenti (Basati su Yii) di come dovrei impostare il database e il UserIdentity per una buona gestione?

Perdonate la domanda banale, ma non è la prima volta che devo risolvere il problema e mi piacerebbe avere un approccio pulito e scalabile (Immaginiamo il caso in cui ho anche utenti di tipo 4, tipo 5 e così via).

Grazie in anticipo per l’attenzione.

Max

Dopo che avrai letto questo avrai tutte le risposte.

Io ti consiglio di avere una sola tabella di autenticazione per tutti gli utenti.

Per i permessi puoi usare il sistema rbac di yii (vedi il link di sensorario).

Per i campi specifici per tipo utente ci sono 2 varianti:

Metti tutto in una sola tabella (quindi con tanti campi che saranno null): soluzione quasi obbligata se uno scrittore puo’ essere anche lettore

Una tabella a parte in relazione 1:1 con gli utenti per i campi accessori (soluzione utile se hai 100 lettori per ogni scrittore e non vuoi aver tanti null).

Per la form devi creare uno scenario per tipo utente (che imposti nel controller), sul client puoi semplicemente mostrare/nascondere i campi accessori.

Io per una problematica simile ho usato questo sistema:

Una tabella unica per le autenticazioni

Una tabella per ogni tipo profilo (clienti, amministratori, etc…)

Poi in base al ruolo dell’utente pesco il profilo caricando il modello della tabella relativa.

In questo modo se un utente ha più ruoli posso carcare tutti i profili dell’utente.