2009-07-29 14 views
14

Non sono sicuro di doverlo fare diversamente con MVC, ma sono curioso di sapere qual è l'approccio consigliato per aggiungere ulteriori informazioni a un account utente ASP.NET quando si utilizza l'abbonamento. fornitore? Anche come associare questo uso con altre entità.Associazione di informazioni aggiuntive con Membership ASP.NET MVC

Normalmente non mi preoccupo dei profili e preferisco aggiungere ulteriori informazioni a una tabella che fa semplicemente riferimento allo USERID. Questo è buono/cattivo/accettabile per l'approccio ASP.NET MVC o quale sarebbe un'alternativa?

risposta

10

È una buona domanda e una con cui ho faticato. Penso che ci siano tre approcci di base;

  1. utilizzare un provider di profilo - questo lo rende facile aggiungere proprietà, ma ingombrante di fare cose come la generazione di una tabella di utenti, soprattutto se avete bisogno di applicare filtri/ricerche. L'API non lo taglia.

  2. Aggiungere una nuova tabella (o estendere la tabella esistente) e quindi aggiungerla. Dovrai quindi scrivere i tuoi metodi per recuperare i dati personalizzati.

  3. Scrivi il tuo provider di appartenenza che estende la classe MembershipProvider.

Per il mio ultimo progetto ho usato quest'ultimo approccio - ho scritto un provider SQL molto quck che ha implementato solo lo stretto necessario richiesto per la creazione di utenti, l'autenticazione e la modifica delle password. Per il resto dei metodi virtuali ho appena lanciato un NotImplementedException.

Ho quindi aggiunto una nuova classe che ha aggiunto le proprietà aggiuntive di cui avevo bisogno e l'ho resa tale da poter essere istanziata passando in uno standard MembershipUser. Qualcosa di simile a questo:

public static CustomMember GetMember(MembershipUser user) 
{ 
    // Get your custom member 
} 

In questo modo è possibile utilizzare il MembershipUser standard per la maggior parte delle cose, ma se avete bisogno di avere maggiori dettagli circa l'utente corrente fare cose come questa:

MembershipUser user = Membership.GetUser(); 
CustomMember member = CustomMember.GetMember(user); 

mi piacerebbe essere interessato a vedere quali sono gli approcci degli altri popoli, però.

+0

Grazie per la risposta. Mi piace il tuo approccio. Sono anche curioso di vedere cosa pensano gli altri. – Dkong

+0

Non sono sicuro di come si "mischiano e si abbinino" i provider di appartenenze, sicuramente CustomMember.GetMember() estrae i dati da una tabella personalizzata mentre Membership.GetUser() agirà sulla tabella asp_users predefinita? – greenimpala

+0

Ehi, grazie per il consiglio. Ma ci sono articoli o buone pratiche riguardo alla scelta di questo approccio? Sarei grato per tali collegamenti. –

1

Il fatto che si utilizzi MVC non dovrebbe avere alcun impatto significativo sul modo in cui si gestiscono l'abbonamento e i "dati utente".

Inoltre, in genere, evito i profili ASP.NET e, in effetti, l'appartenenza ASP.NET predefinita, preferendo eseguire il rollover del mio provider di appartenenze e dello schema "profilo", collegato alla mia tabella utente esistente.

Invia un commento se sei interessato a ulteriori informazioni sui fornitori di abbonamento clienti.

0

Mi piacerebbe ricevere molti più feedback su questo argomento e su ciò che le persone fanno. Attualmente sto usando il sistema standard di appartenenza/ruolo di asp.net in un'app per mvc asp.net e non mi piace molto.

Il mio approccio era di modificare la tabella aspnet_users e aggiungere un gruppo di colonne aggiuntive; CompanyId, StreetAddress ecc.

Ho memorizzato le impostazioni del profilo degli utenti per come utilizzano il sito Web nel profilo standard; quale tema usano, quanti record vengono visualizzati dagli elenchi pagati e altre cose.

Come la maggior parte delle persone a trovare, ottenere informazioni dentro e fuori di profilo è un dolore e da quello che sto leggendo in grandi sistemi può diventare un collo di bottiglia a causa della serializzazione.

Sono propenso a rotolare sui miei tavoli che corrispondono meglio al mio schema di applicazione, implementando un provider sql personalizzato e quindi guardando scrivere alcuni attributi di sicurezza aggiuntivi in ​​asp.net mvc se ne ho bisogno.

Problemi correlati