Applic multi-user

Spawn3107 Messages postés 84 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 28 mars 2011 - 2 nov. 2010 à 16:36
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.

7 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
3 nov. 2010 à 07:04
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!
0
Spawn3107 Messages postés 84 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 28 mars 2011
3 nov. 2010 à 08:53
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.
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
9 nov. 2010 à 15:21
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.
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
11 nov. 2010 à 11:37
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
12 nov. 2010 à 19:40
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!
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
12 nov. 2010 à 22:57
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.
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
13 nov. 2010 à 11:39
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.
0
Rejoignez-nous