none
Gestion des roles via le Global.asax RRS feed

  • Question

  • Bonjour,

    ceci est une question pour rendre mon code le plus "propre" possible (pour faire bien Wink

    je suis en train de faire une gestion de rôle pour l'accès sur des pages (mon site est tout petit, pas la peine de faire une enorme gestion hyper complexe pour 3 pages)

    dans mon web config, j'ai mis

    Extrait de code

            <!-- Profils Utilisateurs -->
            <add key="Referent" value="utilisateur1,utilisateur2,utilisateur3"/>
            <add key="Administrateur" value="utilisateur4,utilisateur5,utilisateur6"/>



    donc lors de l'ouverture du site, j'ai dans mon global.asax

    Extrait de code

    void Application_Start(object sender, EventArgs e)
        {
            // Code qui s'exécute au démarrage de l'application
            // Profil Referent
            string[] sReferent = ConfigurationManager.AppSettings["Referent"].Split(',');
            Application["Referent"] = sReferent;
            // Profil Administrateur
            string[] sAdministrateur = ConfigurationManager.AppSettings["Administrateur"].Split(',');
            Application["Administrateur"] = sAdministrateur;
        }



    J'ai une méthode dans une classe pour connaitre l'appartenance ou non dans un groupe :

    Extrait de code

            /// <summary>
            /// Vérification du profil de l'utilisateur
            /// </summary>
            /// <param name="sUserLogin">Login de l'utilisateur</param>
            /// <param name="sUsersGroup">Groupe utilisateur à vérifier</param>
            /// <returns>True s'il appartient au groupe, false sinon</returns>
            public static bool IsInGroup(string sUserLogin, string[] sUsersGroup)
            {
                foreach (string sUser in sUsersGroup)
                {
                    if (sUserLogin.IndexOf(sUser, 0) != -1)
                    {
                        return true;
                    }
                }
                return false;
            }



    et dans ma page .aspx

    Extrait de code

    protected void Page_Load(object sender, EventArgs e)
        {
            //recherche de la personne qui navigue
            if (!IsPostBack)
            {
                //identification de l'utilisateur
                string login = User.Identity.Name;
                this.Session["login"] = login;
                //Profil Administrateur
                if (ClsAnnuaire.IsInGroup(login, Application["Administrateur"] as string[]))
                {
                    this.Session["role"] = ClsAnnuaire.PROFIL_ADMINISTRATEUR;
                }
                //profil Referent
                else if (ClsAnnuaire.IsInGroup(login, Application["Referent"] as string[]))
                {
                    this.Session["role"] = ClsAnnuaire.PROFIL_REFERENT;
                }
                //Profil Utilisateur
                else
                {
                    this.Session["role"] = ClsAnnuaire.PROFIL_UTILISATEUR;
                }
            }
      }



    Ensuite je pense faire un switch sur this.Session["role"] pour des affichages ou des redrections.

    J'aimerai savoir si c'est correct, ou si on peut mieux faire Wink

    merki
    jeudi 17 janvier 2008 10:28

Réponses

  • Bonjour,

    Pour simplifier un peu vos page vous pouvez déplacer l'ensemble de "if/else if" permettant de sauver en session le type de profil de l'utilisateur :

    • Si vous êtes en authentification intégrée windows dans le Session_Start.
    • Si vous êtes en authentification par formulaire, dans la page du formulaire d'authentification juste après avoir vérifié les données.

    L'intéret est que le test ne sera fait qu'un fois et que vous n'aurez pas à le copier/coller dans chaque page.

     

    Sinon concernant la gestion de l'autorisation d'accès à une page, vous pouvez effectivement mettre un switch sur chaque page si vous n'en n'avez pas beaucoup.

     

    Guillaume

    jeudi 17 janvier 2008 11:24
  • Bonjour,

    Le Application_Start est appelé une et une seul lorsque le site est démarré (sous IIS vous pouvez arrêter/démarrer un site de manière individuel).

    Le Session_Start est appelé une fois lors de la première requête d'un utilisateur sans session.

     

    Guillaume

    jeudi 17 janvier 2008 14:01

Toutes les réponses

  • Bonjour,

    Pour simplifier un peu vos page vous pouvez déplacer l'ensemble de "if/else if" permettant de sauver en session le type de profil de l'utilisateur :

    • Si vous êtes en authentification intégrée windows dans le Session_Start.
    • Si vous êtes en authentification par formulaire, dans la page du formulaire d'authentification juste après avoir vérifié les données.

    L'intéret est que le test ne sera fait qu'un fois et que vous n'aurez pas à le copier/coller dans chaque page.

     

    Sinon concernant la gestion de l'autorisation d'accès à une page, vous pouvez effectivement mettre un switch sur chaque page si vous n'en n'avez pas beaucoup.

     

    Guillaume

    jeudi 17 janvier 2008 11:24
  • merci, j'y avais pensé mais je savais pas trop ou le placé dans le global.asax.

    pour information
    la méthode Application_Start s'initialise au démarrage de l'application, c'est à dire au démarrage du server?
    et dans ce cas, Session_Start s'execute à la connection de l'utilisateur?

    c'est un peu confus!

    merki
    jeudi 17 janvier 2008 13:16
  • Bonjour,

    Le Application_Start est appelé une et une seul lorsque le site est démarré (sous IIS vous pouvez arrêter/démarrer un site de manière individuel).

    Le Session_Start est appelé une fois lors de la première requête d'un utilisateur sans session.

     

    Guillaume

    jeudi 17 janvier 2008 14:01
  • merki pour ce complement d'information Smile
    jeudi 17 janvier 2008 14:20
  • Bonjour,
    j'ai une question par rapport au Session_Start.

    Si l'utilisateur perd la session (durée d'inactivité trop longue), lorsque l'utilisateur va de nouveau naviguer dans le site,
    repasse -t'on le session_start ?
    mardi 25 novembre 2008 08:41
  • Bonjour,

    Oui vous repasserez par le Session_Start

     

    mercredi 26 novembre 2008 06:39
  • Merci pour votre réponse !!
    samedi 29 novembre 2008 08:51