Ho trascorso gran parte della giornata di ieri a leggere sull'argomento e ancora mi sento incerto sulla strada da percorrere. Vengo da uno sfondo "roll your own" quando si tratta di autenticazione e autorizzazione. Non abbiamo mai utilizzato l'autenticazione basata su form, per non parlare dell'API Membership. Guardando il nostro vecchio codice useremmo le variabili di sessione per catturare/controllare se un utente è loggato ecc. Con questo nuovo progetto che sto per intraprendere, voglio rimetterci in pista con quello che dovremmo fare per cominciare, che è usare gli strumenti forniti dal framework.Aiutami a decidere se utilizzare provider di appartenenze/ruoli ASP.NET predefiniti o scrivere provider personalizzati
Ho già uno schema di database con cui lavorerò, tuttavia non è impostato su pietra; Sono in grado di apportare modifiche ad esso, se necessario. In questo schema esiste già una tabella Utenti che utilizza un numero intero come chiave primaria. Questa tabella ha anche altre informazioni come Primo e Ultimo nome. Ho anche chiavi esterne basate sullo UserId su altre tabelle come Telefono e Indirizzo. Di seguito espongo alcuni dei pro/contro che vengono in mente.
provider predefinito
Pro
- meno codice.
- Possibilità di utilizzare tutti i controlli server associati come Login, ChangePassword.
Contro
- Alcuni controlli potrebbero non essere usedful per me fuori dalla scatola. Ad esempio, CreateUserWizard, sarà necessario acquisire altre informazioni durante la creazione dell'utente, ad esempio le informazioni su telefono e indirizzo sulle tabelle associate. Non sono sicuro se questo rende questo controllo inutile per me.
- Dovrò creare chiavi esterne nelle mie tabelle associate (telefono, indirizzo) al UserId che è un GUID nel provider predefinito.
- Se si creano questi vincoli di chiave esterna e non si utilizza l'eliminazione a cascata; Dovrò anche eliminare le righe associate nelle tabelle delle chiavi esterne. Potenzialmente è necessario utilizzare qualcosa come un oggetto TransactionScope per assicurarsi che tutto ciò sia un'operazione atomica.
provider personalizzato
Pro
- capacità di utilizzare le tabelle dello schema esistente.
- Più facile per estendere l'autenticazione/l'autorizzazione in un servizio lungo la linea.
Contro
- devono fornire l'implementazione per la maggior parte/tutto da solo.
- Per utilizzare uno dei controlli, dovrò fornire l'implementazione richiesta nel provider.
Potrebbero esserci altre cose che non ho ancora considerato, essendo che non l'ho mai usato prima, il che mi rende un po 'scomodo.
Grazie.
Anche io mi sto appoggiando allo stesso modo, lo schema mi sembra molto limitante. Io davvero non voglio usare i loro GUID come chiavi esterne. Il fatto che dovrò scrivere i miei schermi di amministrazione comunque all'interno dell'applicazione (gli utenti amministratori possono creare altri utenti, ecc.) Mi fa credere che il vantaggio di andare con l'impostazione predefinita sarà minimo. Fondamentalmente, l'unica cosa che sto perdendo è l'implementazione di default del recupero della password, ecc. – e36M3
Hai un altro buon motivo per non utilizzare i provider predefiniti. Alla fine, lo schema di default si sentiva incollato alla mia applicazione, non rientrando nel resto dello schema del mio database, e sarei sempre preoccupato di eseguire trucchi nascosti, come il modo in cui le voci del profilo sono archiviate come menzionato sopra. –
Il provider di profili è praticamente inutile, ma completamente facoltativo, quindi non lo terrei con il provider di appartenenza. – Greg