Custom Profile

mercoledì 17 settembre 2008 - 14.46

rino78 Profilo | Newbie

Salve a tutti, sono nuovo del forum,
ci sono arrivato leggendo questo utilissimo articolo di Marco Rossi
http://www.dotnethell.it/articles/Membership-Role-Profile-Provider.aspx

Ho implementato il tutto nella mia applicazione Web,
ma ora sto uscendo pazzo su un problemino...
Dopo il login, all'evento LoggedIn, vorrei fare questa cosa :

if (Roles.Provider.IsUserInRole(username, "Admin"))

Response.Redirect("~/Admins/Default.aspx");

else if (Roles.Provider.IsUserInRole(username, "User"))

Response.Redirect("~/Default.aspx");

il problema è che non riesco a capire come reperire la "username" corrente... :(

Grazie in anticipo.
Rino

rossimarko Profilo | Guru

>Salve a tutti, sono nuovo del forum,
>ci sono arrivato leggendo questo utilissimo articolo di Marco Rossi

Ciao,

innanzitutto benevenuto e grazie!

Riguardo alla tua domanda nel controllo Login hai una proprietà Username che puoi utilizzare all'interno dell'evento per reperire la username inserita: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.login.username.aspx



-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

rino78 Profilo | Newbie

e per reperirla da un'altra webform?

rossimarko Profilo | Guru

In questo caso allora ti consiglio di inserirla come parametro del profilo e leggerla come qualsiasi altra proprietà.
In alternativa puoi accedere alla proprietà Page.User.Identity.Name, però secondo me la prima ipotesi è la più pulita.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

rino78 Profilo | Newbie

>In questo caso allora ti consiglio di inserirla come parametro
>del profilo e leggerla come qualsiasi altra proprietà.

ok, aggiunta, ma come reperisco quella corrente? Sono un pò a digiuno di Pofile, Membership, Role...
E' la prima volta che ne faccio un uso così spinto.
(p.s. non ho abilitato la session)

>In alternativa puoi accedere alla proprietà Page.User.Identity.Name,

infatti così funziona..

>però secondo me la prima ipotesi è la più pulita.

sembra anche a me... se riuscissi a capire come.


:(
Rino

rino78 Profilo | Newbie

in realtà ho fatto come te nella pagina UserPage.aspx, ovvero :
MyWebProfile.Current.username

ma ritorna sempre vuoto...
perchè?

rossimarko Profilo | Guru

>in realtà ho fatto come te nella pagina UserPage.aspx, ovvero
>:
>MyWebProfile.Current.username
>
>ma ritorna sempre vuoto...
>perchè?
>

Ti torna sempre vuota o solo nell'evento del controllo login?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

rino78 Profilo | Newbie

sempre, anche da un'altra pagina...
ho notato che nel context ci sono solo 2 keys : UserName e IsAuthenticated,
quando invece nel mio web.config ho aggiunto 30 keys.
Però il file WebProfile non l'ho generato con il tool, bensì l'ho fatto a mano.
Ed oltretutto l'ho chiamato CustomWebProfile.
Potrebbe essere questo il problema?

rossimarko Profilo | Guru

>sempre, anche da un'altra pagina...
>ho notato che nel context ci sono solo 2 keys : UserName e IsAuthenticated,
>quando invece nel mio web.config ho aggiunto 30 keys.
>Però il file WebProfile non l'ho generato con il tool, bensì
>l'ho fatto a mano.
>Ed oltretutto l'ho chiamato CustomWebProfile.
>Potrebbe essere questo il problema?
>

Quello che vedi nel Page.User.Identity non centra con il profilo. Si tratta della gestione di base della FormsAuthentication, ed era già presente nella versione 1.0 di asp.net. Ti dice solamente la username salvata nel cookie e se l'utente si è autenticato (esattamente le due proprietà che hai detto tu). Le keys che hai aggiunto tu vanno lette attraverso il provider del profilo (su cui si appoggia che la classe WebProfile) che utilizza come punto di partenza la username dell'utente loggato. Io ti consiglio di fare la classe con il tool e di confrontarla con quella che hai fatto tu per verificare eventuali anomalie.
Hai provato l'esempio che c'è sul sito? In quel caso funziona correttamente?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

rino78 Profilo | Newbie

forse ho beccato il problema.
Ma vorrei avere un chiarimento(se possibile).
Ogni volta che voglio reperire delle informazioni aggiuntive sull'utente,
ovvero, le informazioni messe come property aggiuntive nel web.config,
viene richiamata la stored procedure?

grazie e scusa il disturbo.

Rino

rossimarko Profilo | Guru

Inizialmente nell'esempio, all'interno della classe che implementa il ProfileProvider (metodo GetPropertyValues), c'è la riga di codice:
//Carica istanza dell'oggetto utente Business.User objUser = Business.User.GetUser(username);
In questo caso ogni volta viene effettuato il caricamento da db.

Verso la fine dell'articolo invece riporto un esempio che utilizza il metodo:
//Nuova versione Business.User objUser = UserLoader.GetUserObject(username);
che invece si basa sulla session (se abilitata).

Quindi se tu hai implementato la prima versione per ogni esecuzione della pagina viene richiamata la stored di caricamento dei dati. Se all'interno della pagina accedi due volte al profile, leggendo due proprietà diverse ovviamente la stored viene richiamata una volta e basta
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

rino78 Profilo | Newbie

ok tutto chiaro.

Ma, .NET, nelle sue classi originali fa lo stesso?
Oppure conserva tutte le informazioni nel context?

Grazie.
Rino

rossimarko Profilo | Guru

Se usi i WebProject la classe che mappa il profilo la devi creare a mano o con il tool che ho segnalato.
Con i WebSite invece crea in automatico una classe che mappa le proprietà inserite nel web.config.

Per quanto riguarda il provider di default anche lui carica i dati dal db, in questo caso però è quello di asp.net e il funzionamento è pressochè analogo. Se vuoi approfondire in questo post trovi i link alla documentazione ufficiale che spiega i vari passaggi e le stored utilizzate: http://weblogs.asp.net/scottgu/archive/2006/04/13/442772.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

rino78 Profilo | Newbie

grazie, sei stato gentilissimo!

Saluti
Rino
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5