IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Bouton disponible que pour les Admins [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut Bouton disponible que pour les Admins
    Bonjour,

    Voila j'ai créer un bouton et j'aimerai que les personnes ayant True dans une table de ma BDD puisse être redirigés vers le lien vers les pages admin et les autres vers une page ou on leur dis vous n'avez pas les droits nécessaire.. Étant débutant je me tourne vers vous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
       protected void Button1_Click(object sender, EventArgs e)
        {
     
            if (IsPostBack)
            {
                conn.Open();
                SqlCommand command = new SqlCommand();
                command.CommandText = "SELECT (login, admin) FROM droits WHERE login = '" + WindowsIdentity.GetCurrent().Name.Split('\\')[1] + "' AND admin = '" + true + "'";
                command.Connection = conn;
                Response.Redirect("Admin/default.aspxaspx");
                conn.Close();
            }
            else
            {
                Response.Redirect("pas_droits.aspx");
     
            }
     
        }
    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Il serait plus intéressant de ne pas afficher le bouton/menu qui permet d'aller vers la page admin...(ca t'évitera de faire un request inutile vers le serveur)

    PS : Tu devras tjs vérifier sur ta page admin que l'utilisateur ai bien les droits nécessaires

  3. #3
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut
    Citation Envoyé par Dokho1000 Voir le message
    Il serait plus intéressant de ne pas afficher le bouton/menu qui permet d'aller vers la page admin...(ca t'évitera de faire un request inutile vers le serveur)

    PS : Tu devras tjs vérifier sur ta page admin que l'utilisateur ai bien les droits nécessaires
    Oui c'est une solution aussi mais je ne sais pas comment faire :s

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Par défaut
    Dans le Page_Load :
    - Récupération des données relatives aux droits
    - Test (qui est en fonction de ta récupération de données)
    - Visible/Enabled


    MSDN SqlCommand
    MSDN Cycle de vie des événements ASP

    Sinon, ton code n'est pas bon du tout (en dehors de ce que tu veux faire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    protected void Button1_Click(object sender, EventArgs e)
        {
     
            if (IsPostBack)
            {
                conn.Open();
                SqlCommand command = new SqlCommand();
                command.CommandText = "SELECT (login, admin) FROM droits WHERE login = '" + WindowsIdentity.GetCurrent().Name.Split('\\')[1] + "' AND admin = '" + true + "'";
                command.Connection = conn;
                Response.Redirect("Admin/default.aspxaspx");
                conn.Close();
            }
            else
            {
                Response.Redirect("pas_droits.aspx");
     
            }
     
        }
    Quand tu cliques sur un bouton il va te générer un postback, c'est le principe du contrôle <asp:Button> (du coup, IsPostBack == true tout le temps dans ton Button1_Click)
    De plus, tu ouvres une connexion, tu définis les paramètres de la requête, et ensuite tu fermes la connexion... Il n'y a pas comme un truc qui manque ? (genre l'envoi de la requête ? )
    Et enfin, "default.aspxaspx", petite erreur de frappe (ou ce c/c, au choix).

  5. #5
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut
    Donc ceci je dois le mettre dans mon page load ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                SqlConnection conn = new SqlConnection(@"Data Source=SRV-SQL-3\DEV_APPLI;Initial Catalog=INTRANET-SQLSERVER;Integrated Security=True");
                conn.Open();
                SqlCommand command = new SqlCommand();
                command.CommandText = "SELECT (login, admin) FROM droits WHERE login = '" + WindowsIdentity.GetCurrent().Name.Split('\\')[1] + "' AND admin = '" + false + "'";
                command.Connection = conn;
                command.ExecuteNonQuery();
                conn.Close();
    " - Test (qui est en fonction de ta récupération de données) " C'est à dire ?

    Sinon je dois faire un if ou else ?

    En tout cas merci de vos réponses

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Par défaut
    " - Test (qui est en fonction de ta récupération de données) " C'est à dire ?
    Exemple :
    - La requête récupère la liste des droits de l'utilisateur courant => Le test va être de savoir s'il a le droit d'admin.
    - La requête cherche si l'utilisateur courant est admin => Le test va être de savoir si la requête retourne des données ou non.

    Tu vois la différence ?

    command.ExecuteNonQuery();
    Non ExecuteNonQuery est utilisé pour les "requêtes" dont tu attends un entier en retour (id d'insert, etc).
    Pour une requête de type SELECT, tu voudras plus utiliser SqlCommand.ExecuteReader()

  7. #7
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut
    Merci des explications oui j'ai compris =)

    Et je garde toujours un if else pour la redirection de page ?

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Pas besoin d'un reader pour tester si un user à l'autorisation.
    ExecuteScalar sera bien plus utile.

    Tu peux aussi réaliser ta requête de cette façon afin d'optimaliser les performances (MSSQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select top 1 null 
    from droits 
    WHERE login = '" + WindowsIdentity.GetCurrent().Name.Split('\\')[1] + "' AND admin = '" + false + "'";
    Pour savoir si il a les droits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bool estAdmin = command.ExecuteScalar() != null;
    A+

  9. #9
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut
    Citation Envoyé par Dokho1000 Voir le message
    Pas besoin d'un reader pour tester si un user à l'autorisation.
    ExecuteScalar sera bien plus utile.

    Tu peux aussi réaliser ta requête de cette façon afin d'optimaliser les performances (MSSQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select top 1 null 
    from droits 
    WHERE login = '" + WindowsIdentity.GetCurrent().Name.Split('\\')[1] + "' AND admin = '" + false + "'";
    Pour savoir si il a les droits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bool estAdmin = command.ExecuteScalar() != null;
    A+
    Oula je suis un peu perdu ^^ Et pour la redirection de page, dans la condition du IF ( ?? ) Je met quoi ?

    On est d'accord pour que la requête que tu viens de me donner, elle s'introduit bien dans page_load ?

    Merci

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Tu peux le faire bien avant. Je le ferais au oninit.
    Pour le if :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(!estAdmin)
     Page.Response.Redirect("~/securityException.aspx");
    else
    Page.Response.Redirect("~/admin.aspx");
    idéalement lorsque tu construits ton menu tu pourrais déjà faire le check et ne pas afficher le bouton admin...

  11. #11
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut
    Bon je pense simplement faire un lien juste visible au admin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(@"Data Source=SRV-SQL-3\DEV_APPLI;Initial Catalog=INTRANET-SQLSERVER;Integrated Security=True");
            conn.Open();
            SqlCommand command = new SqlCommand();
            command.CommandText = "SELECT admin FROM droits WHERE login = '" + WindowsIdentity.GetCurrent().Name.Split('\\')[1] + "'";
            command.Connection = conn;
            command.ExecuteReader();
            conn.Close();
     
            //le lire
     
            //si True
            //afficher (Visible)
     
            //si False
            //cacher
     
        }
    Mais je vois pas trop mettre quoi exactement :S

    PS : A la place de executereader je dois mettre executeScalar plutôt non?

  12. #12
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection conn;
     
            try
            {
                 conn = new SqlConnection(@"Data Source=SRV-SQL-3\DEV_APPLI;Initial Catalog=INTRANET-SQLSERVER;Integrated Security=True");
                 conn.Open();
                 SqlCommand command = new SqlCommand();
                 command.CommandText = "SELECT admin FROM droits WHERE login = '" + WindowsIdentity.GetCurrent().Name.Split('\\')[1] + "'";
                 command.Connection = conn;
     
                 if(command.ExecuteScalar() != null)
                 {
                      myButton.Visible = true; // Avec, par défaut, la visibilité à false !
                      // Et autres joyeusetés à faire pour l'admin
                 }
            }
            catch (Exception ex)
            { 
                 // Gestion d'erreurs
            }
            finally
            {
                 conn.Close();
            }
        }
    Après, tu voudras peut-être garder des traces de cette requête au fil de la navigation (je suppose quand même que tu auras besoin de ça ailleurs) ?

  13. #13
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut
    Bah en faite c'est directement dans le menu, donc au final il reste tout le temps.

    Mais c'est pour un bouton le code que tu ma fournis ?

    Merci en tout cas de votre aide

  14. #14
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Par défaut
    Citation Envoyé par Florian_D Voir le message
    Bah en faite c'est directement dans le menu, donc au final il reste tout le temps.

    Mais c'est pour un bouton le code que tu ma fournis ?

    Merci en tout cas de votre aide
    Ben pour ce que tu veux...
    C'est juste un exemple, mais maintenant, tu peux définir des actions différentes pour l'admin (afficher certains menus, liens, changer de couleur, lui apporter un café...) !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(command.ExecuteScalar() != null)
    {
         // Et autres joyeusetés à faire pour l'admin
    }

  15. #15
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Par défaut
    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Le FTP ne fonctionne que pour les domaines racines ?
    Par Shudrum dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 29/08/2008, 14h45
  2. Message d'alerte que pour les gens connecté sur le portail
    Par oudrhiri dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 04/04/2008, 15h31
  3. Création barre menus rien que pour les utilisateurs
    Par jlfprofoto dans le forum Access
    Réponses: 3
    Dernier message: 03/03/2008, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo