Applic multi-user

Messages postés
84
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
28 mars 2011
- - Dernière réponse : Shaolyne
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Statut
Membre
Dernière intervention
8 mars 2011
- 13 nov. 2010 à 11:39
Bonjour à tous,

je crée une application en winform avec différents formulaires. Chaque formulaire à des boutons ajout/suppression/modification/... J'aimerais bien que dans chaque formulaire, les boutons soient grisés ou non suivant le groupe de l'utilisateur.

Dans ma base de donnée, j'ai pour chaque user son groupe/rôle (Admin,Manager,Operator).

Est-ce que quelqu'un a une idée comment je pourrais définir les différents accès sans devoir tester à chaque bouton le rôle de l'utilisateur ou de faire un formulaire pour chaque groupe? Sachant que l'administrateur peut changer les droits des groupes à tout moment.


Merci.
Afficher la suite 

7 réponses

Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
26
0
Merci
Bonjour

tu peux passer un parametre à la création de la "form" pour définir le mode d'utilisation
ensuite, au chargement, tu actives ou non les boutons.
//définition des mode d'utilisation
public enum UserMode
{
Superviseur,
Administrateur,
Utilisateur,
}

public partial class Form2 : Form
{
private UserMode _userMode;
public Form2(UserMode userMode)
{
_userMode = userMode;
InitializeComponent();

}

private void Form2_Load(object sender, EventArgs e)
{
button_Supprimer.Enabled _userMode UserMode.Superviseur;
button_ajouter.Enabled _userMode UserMode.Administrateur ||
_userMode == UserMode.Superviseur;
button_Modifier.Enabled _userMode UserMode.Utilisateur ||
_userMode == UserMode.Administrateur ||
_userMode == UserMode.Superviseur; 
}
}


Bob

C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
Messages postés
84
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
28 mars 2011
0
Merci
Oui c'est ce que je voulais faire, mais cela me paraît un peut lourd. Mais c'est vrai que c'est une solution facile.
Commenter la réponse de Spawn3107
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Statut
Membre
Dernière intervention
8 mars 2011
1
0
Merci
En utilisant le modèle OO, tu peux créer une classe MyCustomForm qui dérive de la classe de base Form issue du framework .NET. Dans cette classe, tu placeras le code adéquat à la gestion de l'affichage des différents boutons. Pour ce faire, 2 options sont à ta disposition:
[list][*] Créer un formulaire de base contenant 3 boutons et assurer la gestion de l'affichage de ces boutons via une propriété UserMode.
[*] Créer un formulaire vierge contenant 4 propriétés (3 de type "button" et une de type "UserMode") permettant ainsi de référencer tes 3 boutons, ajouter la logique d'affichage de ces derniers et finalement surcharger la méthode onLoad./list
Je pense qu'un exemple sera bien plus parlant
Je vais donc mettre le code pour la seconde méthode.

Tout d'abord, tu créés ta classe personnalisée
public partial class MyCustomForm : Form


Tu peux y placer 4 propriétés auto-implémentées, par exemple, comme ceci:
{
   public Button btnAjouter {get; set;}
   public Button btnSupprimer {get; set;}
   public Button btnModifier {get; set;}
   public UserMode userMode {get; set;}
}


Dans ton méthode OnLoad, tu peux ainsi adapter les accès à tes boutons
protected override void OnLoad(EventArgs e)
{
   base.OnLoad(e);
   
   if(btnAjouter != null)
      btnAjouter.Enabled (userMode UserMode.Administrateur
                            || userMode == UserMode.Superviseur);
   
   //Aucune contrainte au niveau du bouton modifier
   //btnModifier.Enabled = true;

   if(btnSupprimer!= null)
      btnSupprimer.Enabled (userMode UserMode.Administrateur);
}


Ainsi, tu pourras déclarer tout formulaire comme ceci
public partial class RegisterPersonalDataForm : MyCustomForm


En prenant bien soin d'attribuer, via le designer, les boutons d'"action" aux propriétés adéquates. Il ne reste plus que le userMode à gérer, ce qui ne pose pas de problème je pense


Shao.
Commenter la réponse de Shaolyne
Messages postés
221
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012
0
Merci
salut,

tout pareil que ci dessus mais en plus si tu stock les types ou les noms des controles a activer ou non dans une base de donnees ou dans un fichier xml tu pourrais par une simple procedure parcourir tous les controles d'un formulaire quelconque pour les griser ou non, en plus ton appli restera souple ( imagine tu change d'avis et les oparateurs peuvent ecrire dans un textbox tu devra recoder et recompiler et reinstaller tout).

bon dev
Commenter la réponse de l0r3nz1
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
26
0
Merci
Bonsoir

L'exemple est interressant si on veut réutiliser ces fonctions dans differents formulaires ou d'autres applications, sinon ...

Bob
C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
Messages postés
221
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
17 mars 2012
0
Merci
Bonsoir,

encore d'accord avec toi, Robert33. ça a l'air lourd surtout si ce n'est utilisé qu'une seule fois effectivement.

mais de maniere generale je suis pour eviter les solutions pour un seul probleme précis, une solution plus générale est à garder sous le coude et sera souvent réutilisée. suffit parfois de prendre son courage a deux mains et on se rend compte que cela fonctionne aussi bien et que ce n'est pas plus long a developper, juste a peine plus complexe.

une autre astuce inspirée par les metadonnées est d'utiliser le nommage des controles. de maniere générale il est important de nomenclaturiser le nomage de ses variables et controles, ça peut paraitre tordu mais utilser cet nomenclature (une solution qui pousse le vice trop loin est de creer une classe speciale heritant du controle avec des "parametres metadonnées". parce que la on ne peut plus placer l'objet en deux clics).

Mais en fin de compte même appuyer sur les touches est nomenclaturisé, si je colle un "b" sur ma touche "a" j'ai fait un prgramme qui change les "a" en "b"... petite divagation pour dire qu'il ne faut pas pas négliger les nomenclatures.
Commenter la réponse de l0r3nz1
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Statut
Membre
Dernière intervention
8 mars 2011
1
0
Merci
Bien le bonjour,

Je tiens tout d'abord à dire que je suis enthousiaste de voir qu'une discussion s'articule autour de la question posée par Spawn3107.

Effectivement, l'exemple n'a d'intéret que si le développeur doit gérer des droits d'utilisateurs sur une application complète (ensemble de formulaire dans le cadre d'une applic winforms). Si l'application est composé d'une seule fenêtre (Avec un ou plusieurs contrôles qui sont chargés dynamiquement), alors le code doit être porté au niveau de la fenêtre. Cependant, je ne connais que trop peu d'application mono fenêtre.

Concernant la nomenclature des noms de contrôles, c'est une solution intéressante. Il faut cependant, une fois de plus, évaluer l'intéret d'un développement comme celui-là. Si les exigences de l'utilisateurs sont d'avoir 3 boutons pour lesquels une gestion de droits est nécessaire, alors il faut oublier un système générique portant sur des nomenclatures définies. Dans le cas contraire, cela peut devenir très intéressant et puissant.

Shao.
Commenter la réponse de Shaolyne