//Po wylogowaniu zostaje przypisany anonimowy użytkownik oraz powiadomione wszystkie funkcjie o zmianie użytkownika. private void Logout(object parameter) { CustomPrincipal customPrincipal = Thread.CurrentPrincipal as CustomPrincipal; if (customPrincipal != null) { customPrincipal.Identity = new AnonymousIdentity(); NotifyPropertyChanged("AuthenticatedUser"); NotifyPropertyChanged("AuthenticatedRole"); NotifyPropertyChanged("IsAuthenticated"); NotifyPropertyChanged("IsAdmin"); NotifyPropertyChanged("IsKurier"); NotifyPropertyChanged("IsKsiegowy"); _loginCommand.RaiseCanExecuteChanged(); _logoutCommand.RaiseCanExecuteChanged(); Status = string.Empty; } }
//Obsługa logowania się użytkownika private void Login(object parameter) { PasswordBox passwordBox = parameter as PasswordBox; string clearTextPassword = passwordBox.Password; try { //Sprawdzanie użytkownika User user = _authenticationService.AuthenticateUser(Username, clearTextPassword); CustomPrincipal customPrincipal = Thread.CurrentPrincipal as CustomPrincipal; if (customPrincipal == null) { throw new ArgumentException("The application's default thread principal must be set to a CustomPrincipal object on startup."); } //Autoryzuj użytkownika customPrincipal.Identity = new CustomIdentity(user.Username, user.Email, user.Roles); //Powiadomienie o zmianie użytkownika NotifyPropertyChanged("AuthenticatedUser"); NotifyPropertyChanged("AuthenticatedRole"); NotifyPropertyChanged("IsAuthenticated"); NotifyPropertyChanged("IsAdmin"); NotifyPropertyChanged("IsKurier"); NotifyPropertyChanged("IsKsiegowy"); _loginCommand.RaiseCanExecuteChanged(); _logoutCommand.RaiseCanExecuteChanged(); Username = string.Empty; //reset passwordBox.Password = string.Empty; //reset Status = string.Empty; } catch (UnauthorizedAccessException) //Złapanie wyjątku jeśli login i hasło nie pasują do siebie. { Status = "Logowanie nie powiodlo się."; } catch (Exception ex) { Status = string.Format("ERROR: {0}", ex.Message); } }