8 messaggi dal 14 maggio 2002
Salve a tutti, è la prima volta che scrivo e spero che qualcuno mi possa aiutare.
Premetto che ho cominciato da poco Asp.Net.
Ho letto lo script #614 a proposito dell'autenticazione basata sui ruoli ed ho provato ad usarlo ma devo aver commesso qualche errore.
La mia intenzione è quella di dare un messaggio qualsiasi all'amministratore una volta effettuato il login.
A tal proposito uso la la proprietà IsInrole, ma non capisco perchè non mi funzioni.
Infatti il valore di User.IsInrole("Admin") mi risulta false.
Il codice è il seguente:

pagina login.aspx:

Private Sub Accedi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Accedi.Click
If ValidateUser(txtUsername.Text, txtPassword.Text) Then
FormsAuthentication.Initialize()
Dim strRole As String = AssignRoles(txtUsername.Text)

Dim fat As FormsAuthenticationTicket = New _ FormsAuthenticationTicket(1, _
txtUsername.Text, DateTime.Now, _
DateTime.Now.AddMinutes(30), False, strRole, _
FormsAuthentication.FormsCookiePath)
Response.Cookies.Add(New HttpCookie(FormsAuthentication.FormsCookieName, _
FormsAuthentication.Encrypt(fat)))
Response.Redirect(FormsAuthentication.GetRedirectUrl _(txtUsername.Text, False))
Else
response.write("Code Error")
End If
End Sub

Private Function ValidateUser(ByVal strUsername As String, ByVal strPassword As String) As Boolean

Return CBool(strUsername = "pippo" AndAlso strPassword = "password")
End Function

Private Function AssignRoles(ByVal strUsername As String) As String

If txtusername.Text = "pippo" Then
Return "Admin,Manager"
Else
Return String.Empty
End If
End Function




pagina Global.asax.vb

Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
If Not (HttpContext.Current.User Is Nothing) Then
If HttpContext.Current.User.Identity.IsAuthenticated Then
If TypeOf HttpContext.Current.User.Identity Is FormsIdentity Then
Dim fi As FormsIdentity = CType(HttpContext.Current.User.Identity, FormsIdentity)
Dim fat As FormsAuthenticationTicket = fi.Ticket

Dim astrRoles As String() = fat.UserData.Split(",")
HttpContext.Current.User = New GenericPrincipal(fi, astrRoles)
End If
End If
End If

End Sub



pagina admin.aspx.vb

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If User.IsInRole("Admin") Then
lblmessage.Text = "Benvenuto administrator"
End If
End Sub
probabilmente quando assegni i ruoli non lo fai in maniera corretta. controlla con il trace che effettivamente ci sia qualcosa.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
8 messaggi dal 14 maggio 2002
scusami, ho abilitato il trace nella pagina in cui faccio il controllo User.IsInRole e tra le variabili server vedo
il cookie AUTH_USER = pippo il HTTP_COOKIE con login = 042C.......
Dovrei trovare anche qualche variabile con i ruoli assegnati ?

Perdona la mia ignoranza.
no. nel trace dovresti scriverci tu le info che scrivi/leggi, per confermare che in effetti il ticket contenga le informazioni.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
8 messaggi dal 14 maggio 2002
non ci capisco più niente.
Dunque nella pagina di interesse(quella di admin) inserisco nel Page_Load il seguente codice per ottenere i ruoli inserite precedentemente nel ticket:

Trace.IsEnabled = True
Dim id As FormsIdentity = HttpContext.Current.User.Identity
Dim Ticket As FormsAuthenticationTicket = id.Ticket
Dim userdata As String = Ticket.UserData
Trace.Warn(userdata)



Mi vengono visualizzati i ruoli(Admin,Manager) inseriti nel ticket creato in fase di login(lo puoi controllare nel codice del primo messaggio inviato).
Ma allora perchè se faccio if user.IsInRole("Admin") mi da false?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.