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 :

Problème application de priviliéges


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 69
    Par défaut Problème application de priviliéges
    Bonjour,

    Dans mon application asp.net, j'ai créer une classe Habilitation regroupant toute une série de bool qui me permettent de rendre accessible un bouton, un lien, etc..
    Par exemple de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                if (!Habilitation.Admin.ModuleAccess)
                    ibAdmin.Visible = false;
    J'initialise les habilitations de l'utilisateur lors du Page_Load de ma masterPage.
    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
     
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
     
                    string uName = Request.Cookies["UserInfo"]["Name"];
                    lbConectedUser.Text = "Bienvenue " + uName;
     
                    if (!Habilitation.isInit)
                        Habilitation.Init(int.Parse(Request.Cookies["UserInfo"]["ID"]));
     
                    ApplyRestrictToMenu();
                }
                else
                {
                    if (!Habilitation.isInit)
                    {
                        Habilitation.Init(int.Parse(Request.Cookies["UserInfo"]["ID"]));
                        ApplyRestrictToMenu();
                    }
                }
            }
    Voila, mon problème est que à certain changement de page et ce de manière aléatoire, les restrictions sautent, du coup l'utilisateur à accès à tout (ce qui est très embêtant ).

    Ce que je ne comprend pas c'est qu'a chaque PostBack ou !PostBack de ma masterPage je ré-initialise si ma classe n'est pas initialisée et j'applique les restrictions, et que j'ai quand même mes bouton (pourtant contenu DANS ma masterPage) qui s’affiche alors qu'ils ne devraient pas.

    Ma classe Habilitation est une classe static, dont la variable bool "IsInit" me permet de savoir si elle est initialisé ou non.

    Donc est-ce à cause de ma classe, ou peut-être les cookies ?

    Merci

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    SAlut,
    Citation Envoyé par Champouil Voir le message
    Donc est-ce à cause de ma classe, ou peut-être les cookies ?
    Il faudrait un peu de code de la classe Habilitation
    Citation Envoyé par Champouil Voir le message
    J'initialise les habilitations de l'utilisateur lors du Page_Load de ma masterPage
    J'aurai plutôt fait ça dans le session_start du global.asax, ou bien dans une classe de base dont héritent les master pages.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Pour information pour gérer les utilisateurs il est conseillé d'utiliser les MembershipProvider et RoleProvider

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 69
    Par défaut
    Merci pour vos réponses,

    Voici un "résumé" de ma classe Habilitation :
    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
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    public static class Habilitation
        {
            private static bool _isInit;
     
            public static class Activity
            {
                private static bool _ModuleAccess;
     
                public static class View 
                {
                    private static bool _HistoCRA;
                    private static bool _HistoActComp;
                    private static bool _ActivityMissing;
                    private static bool _ActivityWaiting;
                    private static bool _AllActivity;
     
                    public static bool HistoCRA
                    {
                        get { return _HistoCRA; }
                        set { _HistoCRA = value; }
                    }
     
                    public static bool HistoActComp
                    {
                        get { return _HistoActComp; }
                        set { _HistoActComp = value; }
                    }
     
                    public static bool ActivityMissing
                    {
                        get { return _ActivityMissing; }
                        set { _ActivityMissing = value; }
                    }
     
                    public static bool ActivityWaiting
                    {
                        get { return _ActivityWaiting; }
                        set { _ActivityWaiting = value; }
                    }
     
                    public static bool AllActivity
                    {
                        get { return _AllActivity; }
                        set { _AllActivity = value; }
                    }
                }
     
                public static class Action
                {
                    private static bool _SaisirCRA;
                    private static bool _SaisirActComp;
                    private static bool _Validation;
     
                    public static bool SaisirCRA
                    {
                        get { return _SaisirCRA; }
                        set { _SaisirCRA = value; }
                    }
     
                    public static bool SaisirActComp
                    {
                        get { return _SaisirActComp; }
                        set { _SaisirActComp = value; }
                    }
     
                    public static bool Validation
                    {
                        get { return _Validation; }
                        set { _Validation = value; }
                    }
                }
     
                public static bool ModuleAccess
                {
                    get { return _ModuleAccess; }
                    set { _ModuleAccess = value; }
                }
            }
    }
     
    public static void Init(int ID_User)
    {
     
    string Acc = string.Empty, Collab = string.Empty, Bus = string.Empty, Act = string.Empty, Report = string.Empty, Fact = string.Empty, Adm = string.Empty, Aff = string.Empty;
                cmd.CommandText = "SELECT * FROM dbo.GroupeAdministration INNER JOIN "
                    + "MyUser ON GroupeAdministration.ID_Groupe = MyUser.ID_Groupe "
                    + "WHERE MyUser.ID_User=" + ID_User;
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Acc = reader[2].ToString();
                    Collab = reader[3].ToString();
                    Bus = reader[4].ToString();
                    Act = reader[5].ToString();
                    Report = reader[6].ToString();
                    Fact = reader[7].ToString();
                    Adm = reader[8].ToString();
                    Aff = reader[9].ToString();
                }
                reader.Close();
     
                Activity.ModuleAccess = Convert(Act.Substring(0, 1));
     
                Activity.View.HistoCRA = Convert(Act.Substring(2,1));
                Activity.View.HistoActComp = Convert(Act.Substring(3, 1));
                Activity.View.ActivityWaiting = Convert(Act.Substring(4, 1));
                Activity.View.ActivityMissing = Convert(Act.Substring(5, 1));
                Activity.View.AllActivity = Convert(Act.Substring(6, 1));
     
                Activity.Action.SaisirCRA = Convert(Act.Substring(8, 1));
                Activity.Action.SaisirActComp = Convert(Act.Substring(9, 1));
                Activity.Action.Validation = Convert(Act.Substring(10, 1));
     
    }
    En ce qui concerne les Role et Membership provider, je commence seulement à aborder la méthode, mon souci étant que je n'ai utilisé aucun controls asp.net pré fabriquer du genre "login" ou "CreateUserWizard" donc est-ce qu'il faut que je modifie tout mon fonctionnement utilisateur pour me servir des Roles ?

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    La classe Habilitation utilise des propriétés et variables statique. Ces dernière sont pasrticulières et partagées avec toute l'application. Il y a de fortes chances pour que tes internautes héritent de permissions qui ne sont pas les leurs.

    Solution: ne pas utiliser de classe ni de propriétés statiques mais d'instance.

    Pour conserver les permissions en mémoire utilise un dictionnaire statique Dictionary<string, Habilitation> la clef étant l'identifiant de session de l'internaute. Ainsi tu retrouvera facilement les informations dont tu as besoin.

    Important! le dictionnaire est privé statique à l’intérieur d'une classe implémentant le pattern singleton.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 69
    Par défaut
    Ok, merci pour le dictionary.

    Par contre, le fait d'utiliser la propriété static pour ma classe me permettait d'avoir accès à mes Habilitation sur toutes mes pages.

    Du coup pour le dictionnaire, il faut que je l'initialise pendant le page_load de la masterPage (ou le session_Start ), mais pour y avoir accès partout je le met dans une variable Session ?

    Et du coup j'ai certaines pages qui contiennent des variables static, cela pourrai-t-il me poser le même problèmes ?

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

Discussions similaires

  1. Problème Application MDI
    Par draiah dans le forum Delphi
    Réponses: 4
    Dernier message: 20/11/2006, 13h06
  2. Probléme application jarée et jogl.
    Par Asaturne dans le forum 3D
    Réponses: 11
    Dernier message: 10/10/2006, 10h13
  3. Réponses: 6
    Dernier message: 10/07/2006, 14h46
  4. Problème application multi-tier et Oracle ?
    Par bds2006 dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/06/2006, 11h58
  5. problème application avec 2 BD
    Par PAYASS59 dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/01/2006, 15h13

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