Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Sistema login

Visualizzazione discussione

  1. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Devi usare la tecnica di FormsAuthentication, non fare le cose a mano.

    Nella versione "estesa" (senza providers scritti apposta per la gestione dei ruoli), le regole DI DEFAULT della tecnica (ovviamente dal Web.Config si possono cambiare, ma per ora lascia perdere):

    1- Pagina di Login: si deve chiamare "Login.aspx"
    2- Pagina di Default (a cui viene reindirizzato l'utente se le credenziali sono corrette): si deve chiamare "Default.aspx"


    ESEMPIO:

    Per una applicazione con tre CARTELLE all'interno della solution: "area_admin", "area_utente", "area_guest"

    File web.config:
    codice:
    <?xml version="1.0"?>
    <configuration> 
    <system.web> 
            <compilation defaultLanguage="vb" debug="true" />    
            
            <authentication mode="Forms">
                <forms loginUrl="Login.aspx" />
            </authentication>
          
            <authorization>
                <deny users="?" />
            </authorization>
            
            <sessionState mode="InProc" />
            <trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />
    </system.web>
    
    
    
    
    <!-- Gestione Accessi -->
    <location path="area_admin">
          <system.web>
             <authorization>
                <allow roles="admin" />
               <deny users="*" />
             </authorization>
          </system.web>
    </location>
      
    <location path="area_utente">
          <system.web>
             <authorization>
                <allow roles="admin,utente"/>
                <deny users="*" />
             </authorization>
          </system.web>
    </location>
    
    
    <location path="area_guest">
          <system.web>
             <authorization>
                <allow roles="admin,utente,guest"/>
                <deny users="*" />
             </authorization>
          </system.web>
    </location>
    
    </configuration>



    File XML che simula la tabella del DB relativa agli utenti ed ai ruoli:
    codice:
    <?xml version="1.0" encoding="utf-8" ?> 
    <utenti>
        <utente>
            <username>utente1</username>
            <password>password1</password>
            <ruolo>admin</ruolo>
        </utente>
        
        <utente>
            <username>utente2</username>
            <password>password2</password>
            <ruolo>utente</ruolo>
        </utente>
        
        <utente>
            <username>utente3</username>
            <password>password3</password>
            <ruolo>guest</ruolo>
        </utente>
        
    </utenti>

    Sub che va inserita nel file Global.asax.vb:
    codice:
    Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
    
            If Context.Request.IsAuthenticated Then
                ' Cerca un ruolo per l'utente corrente
                Dim dsUtenti As New System.Data.DataSet
                Dim riga_utente() As System.Data.DataRow
                Dim ruoli() As String
                Dim AppPath As String = Request.ApplicationPath
                Dim percorsoXML As String = Server.MapPath(AppPath & "/utenti.xml")
    
    
                dsUtenti.ReadXml(percorsoXML)
                riga_utente = dsUtenti.Tables(0).Select("username='" & HttpContext.Current.User.Identity.Name & "'")
                ruoli = Split(riga_utente(0)("ruolo"), ",")
    
    
                ' Assegna il ruolo letto nel file XML all'utente corrente
                System.Web.HttpContext.Current.User = New System.Security.Principal.GenericPrincipal(System.Web.HttpContext.Current.User.Identity, ruoli)    
            End If
    
    End Sub


    Pagina Login.aspx (con due textbox, "tbUserid" e "tbPassword" ed un Button, "btLogin"):
    codice:
    Protected Sub btLogin_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btLogin.Click
            Dim dsUtenti As New DataSet
            Dim riga_utente() As DataRow
    
    
            ' Legge il file XML degli utenti e lo mette nel Dataset
            Dim AppPath As String = Request.ApplicationPath
            Dim percorsoXML As String = Server.MapPath(AppPath & "/utenti.xml")
            dsUtenti.ReadXml(percorsoXML)
    
    
            ' Cerca nel DataTable del Dataset appena riempito
            riga_utente = dsUtenti.Tables(0).Select("username='" & tbUserid.Text & "'")
    
    
            ' Se trova l'utente nel file XML...
            If riga_utente.Length > 0 And riga_utente(0)("password") = tbPassword.Text Then
                FormsAuthentication.RedirectFromLoginPage(tbUserid.Text.Trim, False)
            Else
                lbmessaggio.Text = "== Accesso non autorizzato =="
            End If
    End Sub



    Pagina Default.aspx (PRESENTAZIONE):
    [Attenzione: devi creare anche TRE pagine nelle TRE aree, "admin.aspx", "utente.aspx", "guest.aspx" - sono le tre pagine di accoglienza a seconda del ruolo]
    codice:
    <%@ Page Language="vb" AutoEventWireup="false" CodeFile="default.aspx.vb" Inherits="_default" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
        <HEAD>
             
        </HEAD>
        <body bgcolor="#e9f404">
            <form id="Form1" method="post" runat="server">    
                <br>
                <br>
                <div align="center">
                    <asp:Label ID="msg" Runat="server"></asp:Label>
                    <br>
                    <br>
                    <asp:HyperLink NavigateUrl="area_admin/admin.aspx" text="Vai alla sezione Admin" Runat="server" Id="link_admin"></asp:HyperLink>
                    <br>
                    <br>
                    <asp:HyperLink NavigateUrl="area_utente/utente.aspx" text="Vai alla sezione Utente" Runat="server" Id="link_utente"></asp:HyperLink>
                    <br>
                    <br>
                    <asp:HyperLink NavigateUrl="area_guest/guest.aspx" text="Vai alla sezione Guest" Runat="server" Id="link_guest"></asp:HyperLink>
                <br>
                <br>
                <asp:Button ID="btLogout" Runat="server" Text="Logout" style="BORDER-RIGHT:medium none;BORDER-TOP:medium none;BORDER-LEFT:medium none;BORDER-BOTTOM:medium none"></asp:Button>
            </form>
            <hr>
        </body>
    </HTML>


    Pagina Default.aspx (CODE-BEHIND):
    codice:
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Response.Write("Dominio\Utente: <b>" & System.Security.Principal.WindowsIdentity.GetCurrent().Name & "</b><br><hr>")
    
    
            If User.IsInRole("admin") Then
                msg.Text = "<b>" & UCase(User.Identity.Name) & "</b>" & ", sei un <b>ADMIN</b> Hai permessi da amministratore per questo sito."
            End If
    
    
            If User.IsInRole("utente") Then
                msg.Text = "<b>" & UCase(User.Identity.Name) & "</b>" & ", sei un <b>UTENTE</b> Benvenuto nella nostra comunità."
    
                link_admin.Text += "  [accesso negato]"
                link_admin.Enabled = False
    
                link_guest.Text += "  [accesso negato]"
                link_guest.Enabled = False
            End If
    
    
            If User.IsInRole("guest") Then
                msg.Text = "<b>" & UCase(User.Identity.Name) & "</b>" & ", sei un <b>OSPITE</b> Registrati al nostro sito."
    
                link_admin.Text += "  [accesso negato]"
                link_utente.Text += "  [accesso negato]"
    
                link_admin.Enabled = False
                link_utente.Enabled = False
            End If 
        End Sub
    
    
        Private Sub btLogout_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btLogout.Click
            FormsAuthentication.SignOut()
            FormsAuthentication.RedirectToLoginPage()
        End Sub


    Questo sistema crea delle aree protette tramite ruolo (ATTENZIONE: dalla 2.0 sono stati introdotti i providers che ti permettono di scrivere meno codice !)

    Ad esempio, se provi ad accedere ad un'area diversa da quella consentita (area_admin per gli Admin etc) ti ridireziona alla pagina di login.
    Ultima modifica di djciko; 05-10-2013 a 01:49

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.