|
@@ -27,55 +27,93 @@ namespace WPF01.pages
|
|
// Количество неверно веденного пароля
|
|
// Количество неверно веденного пароля
|
|
int count = 0;
|
|
int count = 0;
|
|
|
|
|
|
|
|
+ // Таймер, который будет отсчитывать время разблокировки
|
|
|
|
+ // кнопки Вход в случае 3 неверных попыток ввода логин и пароля
|
|
Timer timer = new Timer();
|
|
Timer timer = new Timer();
|
|
|
|
|
|
|
|
+ // Конструктор окна авторизации
|
|
public Authorization()
|
|
public Authorization()
|
|
{
|
|
{
|
|
InitializeComponent();
|
|
InitializeComponent();
|
|
|
|
|
|
- timer.Interval = 5000;
|
|
|
|
|
|
+ // Задать время счетчику 1 минута (60000 миллисекунд)
|
|
|
|
+ timer.Interval = 60000;
|
|
|
|
+
|
|
|
|
+ // Установить событие (функция Timeout) которое
|
|
|
|
+ // будет вызвано, когда 1 минута пройдет
|
|
|
|
+ // (после запуска timer.Start())
|
|
timer.Elapsed += new ElapsedEventHandler(Timeout);
|
|
timer.Elapsed += new ElapsedEventHandler(Timeout);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // Функция для вызова таймером
|
|
void Timeout(object sender, ElapsedEventArgs e)
|
|
void Timeout(object sender, ElapsedEventArgs e)
|
|
{
|
|
{
|
|
|
|
+ // Для доступа к кнопке необходим особый механизм
|
|
|
|
+ // Диспетчер помещает в общую очередь задач
|
|
|
|
+ // действие, которое будет вызвано в UI потоке.
|
|
|
|
+ // В общем нужно просто запомнить эту запись
|
|
Dispatcher.Invoke(new Action(() =>
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
{
|
|
|
|
+ // Включить кнопку
|
|
buttonLogin.IsEnabled = true;
|
|
buttonLogin.IsEnabled = true;
|
|
|
|
+ // Остановить таймер
|
|
timer.Stop();
|
|
timer.Stop();
|
|
}));
|
|
}));
|
|
|
|
+
|
|
|
|
+ // Вместо записи () => {} можно было бы использовать
|
|
|
|
+ // имя функции.
|
|
|
|
+ // например, new Action(имяФункции)
|
|
}
|
|
}
|
|
|
|
|
|
private void ButtonClick(object sender, RoutedEventArgs e)
|
|
private void ButtonClick(object sender, RoutedEventArgs e)
|
|
{
|
|
{
|
|
|
|
+ // Записать значение полей Логин и Пароль
|
|
|
|
+ // в одтельные переменные для удобства использования
|
|
string login = textBoxLogin.Text;
|
|
string login = textBoxLogin.Text;
|
|
string password = textBoxPassword.Password;
|
|
string password = textBoxPassword.Password;
|
|
|
|
|
|
|
|
+ // Проверить количество введенных символов
|
|
|
|
+ // в поля Логин и Пароль
|
|
if (login.Length < 4 || password.Length < 4)
|
|
if (login.Length < 4 || password.Length < 4)
|
|
{
|
|
{
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // Получить из таблицы Manager запись, которая соответствует
|
|
|
|
+ // указанному логину и паролю (login, password)
|
|
IQueryable<Manager> man = Database.Context.Manager.Where(
|
|
IQueryable<Manager> man = Database.Context.Manager.Where(
|
|
m => m.Login == login && m.Password == password);
|
|
m => m.Login == login && m.Password == password);
|
|
|
|
|
|
|
|
+ // Из полученного результата попытаться взять первую запись
|
|
Database.User = man.FirstOrDefault();
|
|
Database.User = man.FirstOrDefault();
|
|
if (Database.User == null)
|
|
if (Database.User == null)
|
|
{
|
|
{
|
|
|
|
+ // Если записей нет, то сказать пользователю
|
|
|
|
+ // о неправильном вводе
|
|
MessageBox.Show("Неверный логин/пароль");
|
|
MessageBox.Show("Неверный логин/пароль");
|
|
|
|
+
|
|
|
|
+ // Увеличить счетчик неверно введенного пароля на единицу
|
|
count++;
|
|
count++;
|
|
|
|
|
|
|
|
+ // Если счетчик достиг значения 3, то...
|
|
if (count >= 3)
|
|
if (count >= 3)
|
|
{
|
|
{
|
|
|
|
+ // заблокировать кнопку Вход
|
|
buttonLogin.IsEnabled = false;
|
|
buttonLogin.IsEnabled = false;
|
|
|
|
+ // и запустить таймер на 1 минуту
|
|
|
|
+ // После 1 минуты таймер разблокирует кнопку
|
|
timer.Start();
|
|
timer.Start();
|
|
}
|
|
}
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // Если пользователь был получен (из базы данных)
|
|
|
|
+ // то проверить его роль, и в соответствии с ролью
|
|
|
|
+ // открыть нужную страницу
|
|
switch (Database.User.Role)
|
|
switch (Database.User.Role)
|
|
{
|
|
{
|
|
case "Директор":
|
|
case "Директор":
|
|
|
|
+ // Для роли Директор октрыть страницу "директор"
|
|
NavigationService.Navigate(PageNavigation.director);
|
|
NavigationService.Navigate(PageNavigation.director);
|
|
break;
|
|
break;
|
|
|
|
|
|
@@ -92,6 +130,7 @@ namespace WPF01.pages
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // На главном окне показать кнопку Мои данные
|
|
PageNavigation.mainWindow.userInfoButton.Visibility = Visibility.Visible;
|
|
PageNavigation.mainWindow.userInfoButton.Visibility = Visibility.Visible;
|
|
}
|
|
}
|
|
|
|
|