Если пользователь проверяет данные для входа в систему в другом классе, чем код, указанный в форме - PullRequest
1 голос
/ 30 ноября 2011

Я относительно новичок в C # и пытаюсь создать приложение, которое начинается с простой аутентификации пользователя до запуска моего основного окна приложения.

На данный момент у меня есть форма входа с просьбой указать домен и пароль пользователя. Затем я использую класс Principalcontext для аутентификации деталей.

Вот код, который вызывается при нажатии кнопки в форме входа в систему (после ввода имени и пароля)

private void validatelogin(object sender, RoutedEventArgs e)
{
  password = passwordBoxICCLogin.Password.ToString();
  username = tbUserName.Text.ToString();

  using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "xxx"))
  {
    bool  isValid = pc.ValidateCredentials(_username, _password);
    if (isValid)
    {
      DevLauncher launch = new DevLauncher();
      launch.Show();
      this.Close();
    }
    else
    { 
      MessageBox.Show("Invalid ID \ Password combination entered");
    }
  }
}

Это, вероятно, покажется базовым для опытных среди вас, но я хотел бы реализовать разумный, аккуратный дизайн, и если я правильно понял, это хорошая основа для остальной части приложения.

1) Должна ли вся эта аутентификация пользователя происходить в коде, лежащем в основе формы, или я должен создать новый класс, называемый скажем ValidateUser, который обрабатывает аутентификацию пользователя, и вызывает ее из события, когда ValidateUser возвращает логическое значение ? У меня есть ноющее чувство, что детали аутентификации не должны появляться непосредственно в коде формы для формы?

2) Исходя из этого, я установил свойства в коде формы для хранения имени пользователя и пароля. Если я создаю валидный пользовательский класс, должны ли эти свойства содержаться в этом классе?

3) Если мой тест NUNIT для этого метода просто протестирует логическое значение, возвращенное методом validatecredentials. т.е. assert.equals (True, validatecredentailsobject (имя пользователя, домен) - или что-то в этом роде?

Опять же, это не совсем правильно. В поисках руководства о том, как можно улучшить общий дизайн, и о написании метода, который можно тестировать в NUNIT.

Я бы хотел разработать оставшуюся часть приложения, написав сначала тест nunit, а затем метод.

1 Ответ

0 голосов
/ 30 ноября 2011

Вместо запроса имени пользователя и пароля вы можете сохранить список имен пользователей (Windows ID) в вашей базе данных, а затем использовать следующий код для получения имени пользователя, вошедшего в систему на компьютере:

string userName = Environment.UserName.ToLower();

Затем сравните userName с тем, что находится в вашей базе данных.

Вы можете сделать это в конструкторе вашей формы перед InitializeComponent () следующим образом:

public partial class Form1 : Form
{
    public Form1()
    {
        string userName = Environment.UserName.ToLower();

        if(isAuthorized(userName)){
            InitializeComponent();
        }
        else {
            MessageBox.Show("You are not authorized");
            Application.Exit();
        }
    }
}

где isAuthorized - ваша функция для проверки уровня авторизации пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...