public UtilisateurViewModel(SysUtilisateur utilisateur)
 {
     TitleContent = string.Format("{0} / {1}", ResourcesService.GetString("ParameterMenuLabel"), ResourcesService.GetString("UtilisateurLabel"));
     SaveCommand = new RelayCommand(Save, CanSave);
     DeleteCommand = new RelayCommand(Delete, CanDelete);
     Utilisateur = utilisateur;
     Code = Utilisateur.Code;
     LoadRights();
 }
        /// <summary>
        /// Permet de savoir si le couple utilisateur/mot de passe est correct sur l'application
        /// </summary>
        /// <param name="user">Utilisateur</param>
        /// <param name="password">Mot de passe</param>
        /// <param name="errorsEnum">Erreur possible lors de l'authentification</param>
        /// <returns></returns>
        public bool IsAuth(string user, string password, out AccessControlErrorsEnum errorsEnum)
        {
            //1. On vérifie que l'utilisateur existe bien
            var usersDb = _repositoryService.Where<SysUtilisateur>(u => u.Code == user);
            if (usersDb.Any())
            {
                var userDb = usersDb.First();
                if (userDb.IsBlock)
                {
                    errorsEnum = AccessControlErrorsEnum.UtilisateurBloque;
                    return false;
                }
                else
                {
                    //2. Préparation du mot de passe avec le GDS
                    var mdpgds = string.Format("{0}.{1}", password, userDb.Gds);

                    //3. On valide le mot de passe
                    if (ServiceLocator.Current.GetInstance<ICryptographyService>().HashSha256(mdpgds) == userDb.MotDePasse)
                    {
                        errorsEnum = AccessControlErrorsEnum.None;
                        CurrentUser = userDb;

                        //On modifie le GDS avec une nouvelle valeur aléatoire
                        GenerateNewGdsForUser(userDb, password);

                        return true;
                    }
                    else
                    {
                        errorsEnum = AccessControlErrorsEnum.MDPIncorrect;
                        return false;
                    }
                }
            }
            else
            {
                errorsEnum = AccessControlErrorsEnum.UtilisateurInconnu;
                return false;
            }
        }
 /// <summary>
 /// 
 /// </summary>
 public AccessLayerService()
 {
     _currentUser = null;
 }
 protected virtual void Dispose(bool disposing)
 {
     _valuesRightDictionary.Clear();
     _currentUser = null;
 }
        /// <summary>
        /// Permet de générer un nouveau GDS et sauvegarder le mot de passe associé à ce nouveau GDS
        /// afin de diminuer les chances de prédiction du mot de passe
        /// </summary>
        /// <param name="user"></param>
        /// <param name="password"></param>
        /// <param name="save"></param>
        private void GenerateNewGdsForUser(SysUtilisateur user, string password, bool save = true)
        {
            //1. Génération d'un nouveau GDS
            var randomBuffer = CryptographicBuffer.GenerateRandomNumber();
            var newGds = Math.Abs(randomBuffer);

            //2. Cryptage du nouveau GDS avec le mot de passe
            var newMdpgds = string.Format("{0}.{1}", password, newGds);
            var newMdp = ServiceLocator.Current.GetInstance<ICryptographyService>().HashSha256(newMdpgds);

            //3. Enregistrement de ces nouvelles valeurs
            user.MotDePasse = newMdp;
            user.Gds = newGds.ToString(CultureInfo.InvariantCulture);
            if (save)
            {
                _repositoryService.Save<SysUtilisateur>(user);
            }
        }
 /// <summary>
 /// Permet de sauvegarder un nouveau mot de passe pour l'utilisateur
 /// </summary>
 /// <param name="user"></param>
 /// <param name="password"></param>
 /// <param name="save"></param>
 /// <returns></returns>
 public bool CreateNewPasswordForUser(SysUtilisateur user, string password, bool save = false)
 {
     try
     {
         GenerateNewGdsForUser(user, password, save);
         return true;
     }
     catch (Exception e)
     {
         //SimpleIoc.Default.GetInstance<IServiceLogger>().LogFatalError(e);
         return false;
     }
 }
 /// <summary>
 /// Permet de déconnecte run utilisateur et de re-initialiser les informations actuelles sur les droits
 /// </summary>
 public bool Disconnect()
 {
     try
     {
         CurrentUser = null;
         _valuesRightDictionary.Clear();
         _valuesColumnsRightDictionnaDictionary.Clear();
         return true;
     }
     catch (Exception)
     {
         return false;
     }
 }