È una buona domanda e una con cui ho faticato. Penso che ci siano tre approcci di base;
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.
Aggiungere una nuova tabella (o estendere la tabella esistente) e quindi aggiungerla. Dovrai quindi scrivere i tuoi metodi per recuperare i dati personalizzati.
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ò.
fonte
2009-07-29 08:58:11
Grazie per la risposta. Mi piace il tuo approccio. Sono anche curioso di vedere cosa pensano gli altri. – Dkong
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
Ehi, grazie per il consiglio. Ma ci sono articoli o buone pratiche riguardo alla scelta di questo approccio? Sarei grato per tali collegamenti. –