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 :

Gestion des Roles en ASP.NET


Sujet :

ASP.NET

  1. #1
    Membre du Club Avatar de akli2008
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 43
    Points
    43
    Par défaut Gestion des Roles en ASP.NET
    Bonjour tout le monde je salue toute l'equipe de developpez.com,
    Alors mon probleme est que je veux faire une gestion des roles sans utiliser membership ,alors j'ai creé 3 tables (users,roles,groups) .
    j'ai creé une methode d'authentification,j'ai mis un site map avec securityTrimmingEnabled="true" et j'ai lié ainsi un menu a ce sitemape.Alors en introduisant les drois d'un administrateur le lien administrateur du menu apparait mais en cliquant sur le lien ce dernier me dirige vers login.aspx sachant que je suis deja connecté comme administrateur et que le role a été pris en charge.Merci voici le code que j'ai mis dans default.aspx
    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)
        {
            if (Request.IsAuthenticated)
            {
     
     
                 SqlDataReader reader1 = SqlHelper.ExecuteReader(urlSqlServer1, CommandType.StoredProcedure, "rolesForUser",
                    new SqlParameter("@nom", User.Identity.Name));
                 ArrayList roleList = new ArrayList();
     
                 while (reader1.Read())
                 {
     
                  roleList.Add(reader1["Name"]);
                 }
     
     
                 String[] roleListArray = (String[])roleList.ToArray(typeof(String));
     
     
                 HttpContext.Current.User = new GenericPrincipal(User.Identity, roleListArray);
     
     
     
     
     
            }
    voici le code de l'authentification que j'ai mis dans login.aspx
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
       public partial class login : System.Web.UI.Page
    {
     
     
        static private string GetConnectionString()
        {
            // To avoid storing the connection string in your code, 
            // you can retrieve it from a configuration file, using the 
            // System.Configuration.ConfigurationSettings.AppSettings property 
            return @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True";
        }
     
        string urlSqlServer1 = GetConnectionString();
     
        protected void Page_Load(object sender, EventArgs e)
        {
     
            if (Request.IsAuthenticated)
            {
     
     
                FormsAuthentication.RedirectFromLoginPage(User.Identity.Name,true);
     
     
     
     
            }
     
     
    }
     
        private bool Authentifier(string strUtilisateur, string strMotDePasse)
        {
     
            bool bOk = false;
     
     
            // chemin vers la BD (SQL serveur 2005):
            string urlSqlServer = GetConnectionString();
            try
            {
                // objet de connexion :
                SqlConnection connexion;
                connexion = new SqlConnection(urlSqlServer);
                // ouvrir la connexion :
                connexion.Open();
     
                // préparation de la requête effective :
                string Requete = "SELECT * FROM users WHERE nom='" + strUtilisateur + "'";
                SqlCommand cmdSqlServ = new SqlCommand(Requete, connexion);
     
                //lecture de plusieurs lignes :
                SqlDataReader lignesRead;
                lignesRead = cmdSqlServ.ExecuteReader();
                // Parcours de la liste des utilisateurs
                while (lignesRead.Read())
                {
     
     
     
                    if (lignesRead["motdepass"].ToString() == strMotDePasse)
                    {
                        bOk = true; break;
                    }
                }
     
                // fermer la connexion :
                connexion.Close();   
            }
     
            catch
            {
                bOk = false;
            }
            return bOk; 
     
        }
     
    protected void  Button1_Click(object sender, EventArgs e)
    {
        if (Request.IsAuthenticated)
        {
            User.IsInRole("client");
        }
     if (Authentifier(txtUtilisateur.Text,txtMotDePasse.Text))
        {
     
    FormsAuthentication.RedirectFromLoginPage(txtUtilisateur.Text, true);
     
        } 
        else 
        {
            lbMessage.Text = "Erreur d'authentification, l'utilisateur ou le mot de passe n'existent pas!"; 
        }
     
    }
     
        protected void Button3_Click(object sender, EventArgs e)
        {
            FormsAuthentication.SignOut(); Response.Redirect("Login.aspx");
        }
        protected void Button1_Load(object sender, EventArgs e)
        {
     
        }

  2. #2
    Membre actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Points : 227
    Points
    227
    Par défaut
    salut

    il faut que tu crée aussi ton cookie d'authentification
    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
     
                //Lecture des roles du membres
                String[] roleListArray = (String[])roleList.ToArray(typeof(String));
     
                //Preparation du ticket d'authentification
                FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1,
                  User.Identity.Name,
                  DateTime.Now,
                  DateTime.Now.AddMinutes(20),
                  false,
                  String.Join("|", roleListArray),
                  FormsAuthentication.FormsCookiePath);
     
                // Encrypte le ticket
                string encTicket = FormsAuthentication.Encrypt(Ticket);
     
                // Creation du Cookies
                HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
    a chaque click il y a une verif a faire que tu pose en global.asax
    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
     
        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
     
            String cookieName = FormsAuthentication.FormsCookieName;
            HttpCookie authCookie = Context.Request.Cookies[cookieName];
     
            if (null != authCookie)
            {
                //Décrypte le Cookie
                FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
     
                //recup les roles dans un tableau
                String[] Roles = authTicket.UserData.Split(new char[] { '|' });
     
                //Créer l'authentification 
                FormsIdentity Identite = new FormsIdentity(authTicket);
                System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(Identite, Roles);
                Context.User = principal;
     
            }    }
    j'ai galeré aussi pour l'utilisation des roles

    a plus

  3. #3
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Pourquoi tu ne veux pas utiliser Membership? Tu fait exactement tout ce que Membership fait... Alors, je m'interroge...

  4. #4
    Membre du Club Avatar de akli2008
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 43
    Points
    43
    Par défaut
    Merci Nashouille,Alors ca me fait rappeler a quelque chose "les cookies d'authentification "que j'ai trouvé dans un tutorial,je croix que ca m'a echapé, desque ca marche je vous fais signe,Merci encore.

    Pour le membership je ne l'ai pas utilisé car je n'arrive pas à créer mes propres UserID en plus j'ai une table profilsclients qui existe deja et je ne sais pas comment personnaliser le membership afin d'avoir les memes UserID que ClientID;si vous avez un lien ou une idée sur ca c'est encore mieux (comment personnaliser le membership ca serai tres bien à part celui de developper.com que j'ai deja testé)

    Alors résumé je testerai avec global.asax et je vous fais signe desque ca marche.

  5. #5
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958

  6. #6
    Membre du Club Avatar de akli2008
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 43
    Points
    43
    Par défaut
    Merci,Neptune

  7. #7
    Membre du Club Avatar de akli2008
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 43
    Points
    43
    Par défaut
    Bonjour à toute l'equipe , Voila le probleme est reglé j'ai juste ajouter un global.asax et j'ai mis ceci :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <script runat="server">
     
        static private string GetConnectionString()
        {
            // To avoid storing the connection string in your code, 
            // you can retrieve it from a configuration file, using the 
            // System.Configuration.ConfigurationSettings.AppSettings property 
            return @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True";
        }
     
        string urlSqlServer1 = GetConnectionString();
     
        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
     
     
     
            if (Request.IsAuthenticated)
            {
     
     
                SqlDataReader reader1 = SqlHelper.ExecuteReader(urlSqlServer1, CommandType.StoredProcedure, "rolesForUser",
                   new SqlParameter("@nom", User.Identity.Name));
                ArrayList roleList = new ArrayList();
     
                while (reader1.Read())
                {
     
                    roleList.Add(reader1["Name"]);
                }
     
     
                String[] roleListArray = (String[])roleList.ToArray(typeof(String));
     
     
                HttpContext.Current.User = new GenericPrincipal(User.Identity, roleListArray);
     
     
     
     
     
            }
        }
    Mais la question que je pose à nashouille et à l'equipe aussi c'estour quoi cette solution fonctionne sans pour autant créer un cookie d'authentification?,comme vous remarquez je n'ai pas créer de cookie mais la connexion se fait tres bien.

  8. #8
    Membre actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Points : 227
    Points
    227
    Par défaut
    pour etre simple

    dans le mecanisme asp.net a chaque click que tu effectue sur ton site passe par cette methode.

    le probleme est que tu refais une connection a la db pour la lecture des roles.

    a plus

  9. #9
    Membre du Club Avatar de akli2008
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 43
    Points
    43
    Par défaut
    Merci nashouille,j'ai bien compris le principe je vais alors l'optimiser.salut

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

Discussions similaires

  1. Comment activer la gestion des roles ASP.NET
    Par Afaf001 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 19/08/2013, 16h59
  2. [Débutant] Gestion des accès web asp.net
    Par miniil dans le forum ASP.NET
    Réponses: 4
    Dernier message: 15/05/2013, 08h15
  3. Réponses: 1
    Dernier message: 19/03/2010, 23h43
  4. Réponses: 12
    Dernier message: 19/12/2007, 11h06
  5. [ASP.NET2.0 C#] Gestion des roles
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 09/08/2007, 11h48

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