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

Windows Forms Discussion :

où mettre une variable accessible par tous ?


Sujet :

Windows Forms

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut où mettre une variable accessible par tous ?
    reBonjour,

    Je cherche maintenant à faire une authentification simple avant le lancement de la première WinForms de mon programme. Et je ne sais pas trop où positionner les éléments.

    J'ai créé:
    • une classe Utilisateur qui va contenir un nom et un niveau de droits.
    • une classe Authentification qui lit un bète fichier xml pour remplir les infos utilisateur


    Je précise que le but n'est pas de gérer une sécurité forte. Il s'agit juste d'un "paramétrage" pour des postes internes.

    Dans le point d'entrée de mon programme, j'écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            static void Main()
            {                       
                Authentification authentification = new Authentification();
                Utilisateur utilisateur = new Utilisateur();
     
                if (authentification.Authentifie(ref utilisateur))
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new FormEntree());
                }
     
            }
    Première question : Est-ce une bonne façon de procéder ?

    Seconde question : Vu que j'ai besoin du niveau de "droit" de l'utilisateur un peu partout dans le programme, je pensais déclarer cette variable utilisateur à l'endroit vu ci-dessus. Problème, dans FormEntree, il semble que je ne puisse pas accéder à cette variable. Si je la déclare dans FormEntree, avant la création de l'instance, je ne peux pas accéder à utilisateur et donc pas l'utiliser dans la méthode Main() où je fais l'authentification. Dans ce cas, quel serait le meilleur endroit pour déclarer ma variable ?

    Merci de vos lumières ..

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Première question : Est-ce une bonne façon de procéder ?
    Personnellement, je ne trouve pas. Pour des autorisations pas trop compliquées, je trouve que le plus simple est de créer des groupes windows d'utilisateurs (ou des roles via AD) et de tester via l'utilisateur loggé la méthode IsInRole.
    Ainsi tu délègues la gestion des droits à windows, et basta.
    Tu as le logging windows qui authentifie l'utilisateur, pas utile de réinventer l'eau chaude à ce niveau, non ?


    Seconde question : Vu que j'ai besoin du niveau de "droit" de l'utilisateur un peu partout dans le programme,
    Classe statique ou singleton avec le niveau de droit en question dans cette classe; c'est le plus simple (le singleton, c'est la version objet des variables globales , donc à utiliser avec les même précautions ; en user c'est bien, en abuser c'est mal )

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    je trouve que le plus simple est de créer des groupes windows d'utilisateurs (ou des roles via AD) et de tester via l'utilisateur loggé la méthode IsInRole.
    Là, tu me parles d'un truc que je maitrise pas encore. Je pensais effectivement à un truc dans ce genre au début, mais je n'ai aucune idée sur la façon de procéder. Je débute en C#, faut pas l'oublier

    La classe statique sera plus de mon niveau actuel.

    Mais si tu as une URL vers un tutoriel expliquant comment accéder aux comptes utilisateurs sous Windows et comment l'utilisateur actuellement loggué, je suis preneur.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Là, tu me parles d'un truc que je maitrise pas encore. Je pensais effectivement à un truc dans ce genre au début, mais je n'ai aucune idée sur la façon de procéder. Je débute en C#, faut pas l'oublier
    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
     
            /// <returns></returns>
            public bool authenticateUser(string groupToCheck)
            {
                    // Vérifier le rôle
                    if (getAuthenticatedUser().IsInRole(groupToCheck))
                    {
                        // L'utilisateur est autorisé à effectuer des opérations du groupe
                        return true;
                    }
                return false;
            }
     
            private static WindowsPrincipal getAuthenticatedUser()
            {
                return (WindowsPrincipal)System.Threading.Thread.CurrentPrincipal;
            }
    C'est un bout de code qui vient d'un de mes projets (je l'ai expurgé à la va vite).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre chevronné Avatar de LooserBoy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 1 085
    Points : 1 976
    Points
    1 976
    Par défaut
    Première question: non
    L'idéal serait d'avoir une classe static (par ex. Manager) qui s'occupe de gerer tout cela. Un petit exemple issu partiellement de mes dev. actuels...
    En reprennant l'idée initiale, mon kernelmanager equivaut à Authentification...
    et checklogin à authentifie
    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
     
    public class KernelManager
        {
            // Design Pattern: Singleton!
            // Un seul manager doit être utilisé!
            private static KernelManager _me;
            private Utilisateur current_utilisateur;
            public static KernelManager Manager
            {
                get
                {
                    if (null == _me)
                    {
                        _me = new KernelManager();
                    }
                    return _me;
                }
            }
     
            // Recupère les paramètres de l'utilisateur courant
            private void LoadParameters()
            {
                 ...
            }
     
            // Sauvegarde les paramètres de l'utilisateur courant
            private void SaveParameters()
            {
                 ...
            }
     
            public bool CheckLogin(ref Utilisateur utilisateur)
            {
                ...
                current_utilisateur = utilisateur;
            }
     
            public bool HasAccessToX()
            {
                ...
            }
    Ensuite pour pouvoir acceder à tout moment aux infos de l'utilisateur dans l'appli:
    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
     
    // verification du login dans FormEntree
    if(KernelManager.Manager.CheckLogin(utilisateur))
    {
        KernelManager.Manager.LoadParameters();
    }
    ...
    // Verification des droits où c'est necessaire
    if(KernelManager.Manager.HasAccessToX())
    {
        // Autorisé
        ...
    }
    else
    {
        // Pas autorisé
    }
    En cas de questions... on est là..

    P.S.: Pfiou le temps que je ponde mon truc... plein de reponses...
    Vu sur un paquet de cigarettes: "Fumer peut entrainer une mort lente et douloureuse"
    - Vivre aussi... Ce n'est pas forcément moins douloureux et c'est même beaucoup plus lent...

  6. #6
    Membre chevronné Avatar de LooserBoy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 1 085
    Points : 1 976
    Points
    1 976
    Par défaut
    @bluedeep: cette methode est certes pas trop compliquée à mettre en oeuvre mais peut parfois s'averer etre inapplicable à cause de politiques de securité d'entreprise... et peut aussi poser des pbs du genre un admin regarde la liste des groupes, ne comprends pas le pourquoi du comment, les supprime et zou! plus d'appli en fonctionnement.
    Dans le cas d'une classe static, l'application est autosuffisante...
    Vu sur un paquet de cigarettes: "Fumer peut entrainer une mort lente et douloureuse"
    - Vivre aussi... Ce n'est pas forcément moins douloureux et c'est même beaucoup plus lent...

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par LooserBoy Voir le message
    P.S.: Pfiou le temps que je ponde mon truc... plein de reponses...
    Pas grave, comme cela il a deux solutions.

    Néanmoins, je reprocherais à la tienne (à première vue, si je me trompe, corrige moi) de faire ce que je lui recommandais d'éviter : windows possède un système d'authentification, autant l'utiliser.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par LooserBoy Voir le message
    @bluedeep: cette methode est certes pas trop compliquée à mettre en oeuvre mais peut parfois s'averer etre inapplicable à cause de politiques de securité d'entreprise...
    Désolé, mais je ne comprends pas : elle a justement l'avantage de s'intégrer à la politique de sécurité de l'entreprise !

    et peut aussi poser des pbs du genre un admin regarde la liste des groupes, ne comprends pas le pourquoi du comment, les supprime et zou! plus d'appli en fonctionnement.
    Dans ce cas, je crois que l'admin va avoir quelques soucis : a priori on installe pas une appli sans concertation avec le SI, non ?

    Dans le cas d'une classe static, l'application est autosuffisante...
    Mais c'est justement le problème : tu es obligé de créer et de supprimer les comptes en "double", alors que cela doit être centralisé (arrivée, départ, mutation interne).

    Ici, tu dois donc avoir un admin de ton appli en plus des admin SI.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  9. #9
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    merci à tous deux ...

    Je vais étudier tout ça.

    LooserBoy, ton code façon singleton me permet donc d'accéder au manager depuis n'importe quel endroit du code ? y compris depuis le Main() ?

    Bluedeep, l'utilisation du groupe d'utilisateurs windows me donnera des droits genre Windows par définition si j'ai bien compris. Et ça m'oblige à créer des groupes d'utilisateurs sur les postes qui vont utiliser cette petite appli. Dans le cas présent, c'est peut-être un peu "lourd". Mais ça me sera utile pour d'autres choses. Je crois que je vais débordé de projets en C# en 2008

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Bluedeep, l'utilisation du groupe d'utilisateurs windows me donnera des droits genre Windows par définition si j'ai bien compris. Et ça m'oblige à créer des groupes d'utilisateurs sur les postes qui vont utiliser cette petite appli. Dans le cas présent, c'est peut-être un peu "lourd". Mais ça me sera utile pour d'autres choses. Je crois que je vais débordé de projets en C# en 2008
    Les groupes peuvent être créés au niveau domaine. De plus, si le domaine où tu implémentes l'application utilise Active Directory, les groupes peuvent être remplacés par des rôles AD.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  11. #11
    Membre chevronné Avatar de LooserBoy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 1 085
    Points : 1 976
    Points
    1 976
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Désolé, mais je ne comprends pas : elle a justement l'avantage de s'intégrer à la politique de sécurité de l'entreprise !
    Pas mal d'entreprises ont pour politique de creer des groupes pour x raisons (fonctionnelles, geographiques, historiques, en fonction de l'humeur de l'admin,...) mais le fait d'avoir le droit à ceci ou cela d'une application particulière : . De plus, j'ai deja eu affaire à des SI qui n'acceptaient même pas que tu aille les voir pour leur annoncer que tu as besoin d'un role supplementaire et de redistribuer les utilisateurs à cause d'une evolution de ton appli...

    Citation Envoyé par Bluedeep Voir le message
    Dans ce cas, je crois que l'admin va avoir quelques soucis : a priori on installe pas une appli sans concertation avec le SI, non ?
    Dans un monde parfait, certes...

    Citation Envoyé par Bluedeep Voir le message
    Mais c'est justement le problème : tu es obligé de créer et de supprimer les comptes en "double", alors que cela doit être centralisé (arrivée, départ, mutation interne).

    Ici, tu dois donc avoir un admin de ton appli en plus des admin SI.
    Oui! Le talon d'Achile de cette solution et sans aucun doute...
    [EDIT]MAIS cela permet d'empecher l'admin reseau d'avoir acces à l'appli. Ceci est une solution retenue par tous les editeurs de logiciels compta ou gestion commerciale qui manipulent des données parfois extremement sensibles (ex. SAGE). De plus, on a pas obligatoirement la necessité d'etre admin pour administrer l'usage de l'appli.[EDIT]
    Vu sur un paquet de cigarettes: "Fumer peut entrainer une mort lente et douloureuse"
    - Vivre aussi... Ce n'est pas forcément moins douloureux et c'est même beaucoup plus lent...

  12. #12
    Membre chevronné Avatar de LooserBoy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 1 085
    Points : 1 976
    Points
    1 976
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    merci à tous deux ...

    Je vais étudier tout ça.
    Papy retourne à ses études, youpi!!!

    Citation Envoyé par Papy214 Voir le message
    LooserBoy, ton code façon singleton me permet donc d'accéder au manager depuis n'importe quel endroit du code ? y compris depuis le Main() ?
    Oui mais je deconseille de toucher au main sauf pour enrichir le paramétrage général de l'appli (genre culture: separateur decimal par defaut, monnaie, etc..)
    Vu sur un paquet de cigarettes: "Fumer peut entrainer une mort lente et douloureuse"
    - Vivre aussi... Ce n'est pas forcément moins douloureux et c'est même beaucoup plus lent...

  13. #13
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par LooserBoy Voir le message
    Pas mal d'entreprises ont pour politique de creer des groupes pour x raisons (fonctionnelles, geographiques, historiques, en fonction de l'humeur de l'admin,...) mais le fait d'avoir le droit à ceci ou cela d'une application particulière : . De plus, j'ai deja eu affaire à des SI qui n'acceptaient même pas que tu aille les voir pour leur annoncer que tu as besoin d'un role supplementaire et de redistribuer les utilisateurs à cause d'une evolution de ton appli...
    Je pratique ces gens là depuis de longues années; après c'est plus une question de "poids" que tu as auprès de l'entreprise.


    [EDIT]MAIS cela permet d'empecher l'admin reseau d'avoir acces à l'appli. Ceci est une solution retenue par tous les editeurs de logiciels compta ou gestion commerciale qui manipulent des données parfois extremement sensibles (ex. SAGE).
    L'argument est quelque peu faiblard dans la mesure où un admin réseau a virtuellement accès de toute manière aux données, sauf si elles sont cryptées.(auquel cas, je t'accorde qu'il fait envisager les choses sous un angle différent - mais uniquement dans ce cas).

    @De plus, on a pas obligatoirement la necessité d'etre admin pour administrer l'usage de l'appli.[EDIT]
    Euh .. si tu n'as pas un niveau "admin de l'appli", ca ne sert à rien d'avoir une sécurité d'accés.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. Réponses: 16
    Dernier message: 20/04/2013, 11h11
  2. Comment définir une variable connu par tous les évènements
    Par whitespirit dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/06/2008, 14h55
  3. Réponses: 7
    Dernier message: 03/10/2007, 17h58
  4. Créer une table accessible par tous
    Par Wilgard dans le forum Administration
    Réponses: 2
    Dernier message: 19/06/2007, 10h45
  5. [ADO] [C#] [VB.NET] Compresser une BD Access par .NET
    Par olivierx dans le forum Accès aux données
    Réponses: 4
    Dernier message: 09/03/2004, 09h42

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