Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37
  1. #1
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908

    Ticket autenticazione e aree riservate

    Avrei la necessità di creare un'area di login che, a seconda dell'utente(Admin o User), abbia accesso ad un'area o un'altra. Qualche suggerimento?
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  2. #2

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    sembra difficile e per me lo è, infatti non ci ho mai capito una beneamata...
    Io metto i ruoli degli utenti (riconosciuti al momento del login) in variabili session e poi nelle diverse aree del sito controllo nel page.load se il ruolo corrente può accedere o meno: nel secondo caso rimbalzo l'utente alla home.
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    no, non e' il modo giusto.ora ti posto un modo che ho usato io

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    web.config
    codice:
    <system.web>
     <compilation debug="true" targetFramework="4.0"/>
     <customErrors mode="Off"/>
     <authentication mode="Forms">
     <forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH"/>
     </authentication>
    </system.web>


    global.asax
    fra i vari eventi assicurati che ci sia questo:

    codice:
    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        if (Context.Request.IsAuthenticated)
        {
            // 
            // CERCA L'UTENTE COLLEGATO NEL DB PER RECUPERARE IL RUOLO
            // 
            if (!string.IsNullOrEmpty(User.Identity.Name.ToString()))
            {
                DatabaseLibrary db = new DatabaseLibrary();
                db.SQL = "SELECT [ruolo] FROM TB_UTENTI WHERE NOMEUTENTE='" + User.Identity.Name.ToString() + "'";
    
    
                DataTable dt = db.GetDataTable("verificaRuoloUtente");
    
    
                if (dt != null && dt.Rows.Count > 0)
                {
                    // 
                    // ASSEGNA IL RUOLO O I RUOLI LETTI ALL'UTENTE CORRENTE
                    // 
                    string[] ruoli = dt.Rows[0]["ruolo"].ToString().Trim().Split(',');
                    System.Web.HttpContext.Current.User = new GenericPrincipal(System.Web.HttpContext.Current.User.Identity, ruoli);
                }
            }
    
    
        }
    }


    login.aspx
    (ho usato il componente login del Fw)
    codice:
     
    <asp:Login
        RememberMeText="Memorizza login&amp;nbsp;&amp;nbsp;"
        LoginButtonText="ENTRA"
        VisibleWhenLoggedIn="false"
        UserNameLabelText="Nome Utente&amp;nbsp;&amp;nbsp;" 
        PasswordLabelText="&amp;nbsp;Password&amp;nbsp;" 
        ID="usr_login" runat="server" Height="115px" 
        Orientation="Horizontal" 
        PasswordRequiredErrorMessage="Password obbligatoria." 
        TitleText="Accesso al portale&lt;br/&gt;&lt;br/&gt;" 
        UserNameRequiredErrorMessage="Nome utente obbligatorio." OnAuthenticate="usr_login_Authenticate" FailureText="Utente non riconosciuto. Riprovare.">
        <TextBoxStyle Width="170px" Height="15" />
        <TitleTextStyle BackColor="DodgerBlue" Font-Size="Medium" Font-Bold="True" ForeColor="White" HorizontalAlign="Center" VerticalAlign="Middle" Wrap="False" />
        <LabelStyle Font-Size="Small" /><ValidatorTextStyle Font-Size="Small" /><CheckBoxStyle Font-Size="Small" />
    </asp:Login>


    login.aspx.cs
    codice:
    protected void usr_login_Authenticate(object sender, AuthenticateEventArgs e)
    {
        DatabaseLibrary db = new DatabaseLibrary();
    
    
        db.SQL = "SELECT [NOMEUTENTE],[PASSWORD] FROM TB_UTENTI WHERE NOMEUTENTE='" + usr_login.UserName + "' AND PASSWORD='" + usr_login.Password + "' AND ATTIVO = 1";
    
    
        DataTable dt = db.GetDataTable("verificaUtente");
    
    
        if (dt != null && dt.Rows.Count > 0 && dt.Rows[0]["NOMEUTENTE"].ToString().ToUpper() == usr_login.UserName.ToUpper() && dt.Rows[0]["PASSWORD"].ToString().ToUpper() == usr_login.Password.ToUpper())
        {
            FormsAuthentication.RedirectFromLoginPage(usr_login.UserName, true);
        }
    }

    la libreria databaselibrary e' solo un wrapper per il DB, puoi accedere al tuo DB dove c'e' la tabella utenti e verificare User e PW.

    il flusso poi sara' a carico dell'evento del global.asax, che gli assegnera' il ruolo.

    Nella pagina di Default poi ho messo, semplicemente (....la gestione dell'accesso alle cartelle te la posto dopo, e' solo una impostazione di un ulteriore <web.config> interno alla cartella)



    Default.aspx.cs
    codice:
    protected void Page_Load(object sender, EventArgs e)
    {
        lbUser.Text = User.Identity.Name == string.Empty ? "Salve, Utente." : "Salve, " + User.Identity.Name;
    
    
        if (User.IsInRole("admin"))
             // abilita menu' Admin
        else
             // abilita menu' Utente 
    }
    Ultima modifica di djciko; 04-03-2017 a 13:36

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    poi nel web.config (anche quello esterno, il principale), puoi scrivere:

    codice:
    <location path="Admin"> <!-- cartella della solution --> 
        <system.web>
            <authorization>
                <allow roles="Administrator"/> <!-- ruolo (scritto nel db in questo esempio) -->
                <deny users="*"/> <!-- nega accesso a tutti gli altri -->
            </authorization>
        </system.web>
    </location>

    e vedrai che se provi a digitare A MANO l'URL di una pagina nella cartella Admin senza esserti autenticato come Administrator, ti riporta alla form di login.


    Questo e' un esempio "vecchio stile" con la forms authentication, poi esistono i Membership Providers come spiegato nell'articolo linkato all'inizio
    Ultima modifica di djciko; 03-03-2017 a 17:13

  7. #7
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    forse ho capito qualcosa... effettivamente così hai un oggetto user che contiene tutte le caratteristiche dell'utente e puoi usarlo dove ti serve, il controllo dell'accesso o meno alle cartelle/varie parti del sito lo fai tutto nel web.config (forse si può fare anche usando un sitemap?) e non devi fargli fare verifiche del ruolo nel page load dei webform... ma se capisco come funziona, l'oggetto user è più o meno come una session?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Non proprio, se guardi il codice è un:

    System.Web.HttpContext.Current.User

    cioe' un
    new GenericPrincipal


    serve proprio a non adottare il metodo (non sicuro) della session fra pagina e pagina.
    E' un oggetto del CONTESTO, usato dal FW per i ruoli ed altre cose

  9. #9
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    Mi si perdoni se torno sull'argomento ...
    Come lo traduco in vb
    DatabaseLibrary db = new DatabaseLibrary();

    ?
    Non ho un tipo DatabaseLibrary....
    Ultima modifica di supermac; 19-06-2017 a 11:06
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  10. #10
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    ah che pirla: non mi serve

    però non mi è chiaro perchè il ruolo deve essere recuperato con un'altra query in una istruzione nel global asax...non potrebbe essere contestuale alla verifica di username e pwd?
    Ultima modifica di supermac; 20-06-2017 a 10:06
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.