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

 .NET Discussion :

Conception - Utilisateur


Sujet :

.NET

  1. #1
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut Conception - Utilisateur
    Bonjour,

    J'ai besoin de votre avis pour savoir si je vais bien dans la bonne direction.
    Voila, j'ai 3 types d'utilisateur (SimpleUser, ClientUser, AdminUser) dans mon application avec des action differentes, et cela est determiné au login de la personne.

    SimpleUser peut lire les infos
    ClientUser peut lire et ecrire les infos
    AdminUser peut lire, ecrire et effacer les infos

    Voila ce que je propose dans mon domain model de ma couche business:

    Enum User
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public enum UserType
        {
            SimpleUser = 0,
            ClientUser = 1,
            AdminUser = 2
        }
    interface IUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public interface IUser
        {
            int Id { get; set; }
            string Name { get; set; }
            void ReadInfo();
            void WriteInfo();
            void DeleteInfo();
        }
    User
    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
     
    public class User : IUser
        {
     
            public int Id { get; set; }
            public string Name { get; set; }
     
            public User(string name)
            {
                Name = name;
            }
     
            public virtual void ReadInfo()
            {
                string myCode = "Code Here: I can read";
            }
     
            public virtual void WriteInfo()
            {
            }
     
            public virtual void DeleteInfo()
            {
            }
        }
    SimpleUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class SimpleUser : User
        {
     
        }
    ClientUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     public class ClientUser: User
        {
            public ClientUser(string name)
                : base(name)
            { }
     
            public override void WriteInfo()
            {
                string myCode = "Code Here: I can write";
            }
        }
    AdminUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     class AdminUser: ClientUser
        {
            public AdminUser(string name) : base(name) { }
     
            public override void DeleteInfo()
            {
                string myCode = "Code Here: I can delete";
            }
        }
    NullUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        public class NullUser : User
        {
            public override void ReadInfo()
            {
     
            }
        }
    User Repository
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public interface IUserRepository
        {
            UserType LogIn(string userName);
        }
    UserFactory
    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
     
        public static class UserFactory
        {
            public static IUser GetUserStrategyFor(UserType userType, string name)
            {
                switch (userType)
                {
                    case UserType.SimpleUser:
                        return new User(name);
                    case UserType.ClientUser:
                        return new ClientUser(name);
                    case UserType.AdminUser:
                        return new AdminUser(name);
                    default:
                        return new NullUser();
                }
            }
        }
    UserService
    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
     
        public class UserService
        {
            private IUserRepository _userRepository;
     
            public UserService(IUserRepository userRepository)
            {
                _userRepository = userRepository;
            }
     
            public IUser GetUser()
            {
                UserType userType = _userRepository.LogIn("test");
     
                IUser user = UserFactory.GetUserStrategyFor(userType, "test");
     
                return user;
            }    
        }
    Merci pour vos conseils.
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    euh moi je ferai pas comme ca.

    Je mettrai dans User une variable de type UserType

    et dans les fonction Read,Delete je regarderait si le User a le level suffisant
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  3. #3
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Pourquoi ne pas utiliser l'attribut PrincipalPermissionAttribute
    http://msdn.microsoft.com/fr-fr/library/k8b3sz1a.aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [PrincipalPermission(SecurityAction.Demand, Role = 'AdminUser')]
    void MyMethod(){}

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/08/2011, 12h03
  2. [Conception] Savoir si l'utilisateur en cours est un administrateur
    Par doudoustephane dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 01/11/2007, 16h22
  3. [Conception] Sécurité au niveau utilisateur
    Par nathou38400 dans le forum Sécurité
    Réponses: 4
    Dernier message: 23/04/2007, 20h18
  4. [conception] [07] mode multi-utilisateurs
    Par Temak31 dans le forum Modélisation
    Réponses: 5
    Dernier message: 23/04/2007, 18h05
  5. [Conception] Problème d'accés aux modifs de l'utilisateur
    Par cedlpv dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/08/2006, 15h41

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