123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Timers;
- using System.Windows.Controls;
- using System.Windows.Input;
- using System.Windows.Navigation;
- namespace WPF01.pages
- {
- using db;
- /// <summary>
- /// Логика взаимодействия для Authorization.xaml
- /// </summary>
- public partial class Authorization : Page
- {
- // Количество неверно веденного пароля
- int count = 0;
- // Таймер, который будет отсчитывать время разблокировки
- // кнопки Вход в случае 3 неверных попыток ввода логин и пароля
- Timer timer = new Timer();
- // Конструктор окна авторизации
- public Authorization()
- {
- InitializeComponent();
- // Задать время счетчику 1 минута (60000 миллисекунд)
- timer.Interval = 60000;
- // Установить событие (функция Timeout) которое
- // будет вызвано, когда 1 минута пройдет
- // (после запуска timer.Start())
- timer.Elapsed += new ElapsedEventHandler(Timeout);
- }
- // Функция для вызова таймером
- void Timeout(object sender, ElapsedEventArgs e)
- {
- // Для доступа к кнопке необходим особый механизм
- // Диспетчер помещает в общую очередь задач
- // действие, которое будет вызвано в UI потоке.
- // В общем нужно просто запомнить эту запись
- Dispatcher.Invoke(new Action(() =>
- {
- // Включить кнопку
- buttonLogin.IsEnabled = true;
- // Остановить таймер
- timer.Stop();
- }));
- // Вместо записи () => {} можно было бы использовать
- // имя функции.
- // например, new Action(имяФункции)
- }
- private void ButtonClick(object sender, RoutedEventArgs e)
- {
- // Записать значение полей Логин и Пароль
- // в одтельные переменные для удобства использования
- string login = textBoxLogin.Text;
- string password = textBoxPassword.Password;
- // Проверить количество введенных символов
- // в поля Логин и Пароль
- if (login.Length < 4 || password.Length < 4)
- {
- return;
- }
- // Получить из таблицы Manager запись, которая соответствует
- // указанному логину и паролю (login, password)
- IQueryable<Manager> man = Database.Context.Manager.Where(
- m => m.Login == login && m.Password == password);
- // Из полученного результата попытаться взять первую запись
- Database.User = man.FirstOrDefault();
- if (Database.User == null)
- {
- // Если записей нет, то сказать пользователю
- // о неправильном вводе
- MessageBox.Show("Неверный логин/пароль");
- // Увеличить счетчик неверно введенного пароля на единицу
- count++;
- // Если счетчик достиг значения 3, то...
- if (count >= 3)
- {
- // заблокировать кнопку Вход
- buttonLogin.IsEnabled = false;
- // и запустить таймер на 1 минуту
- // После 1 минуты таймер разблокирует кнопку
- timer.Start();
- }
- return;
- }
- // Если пользователь был получен (из базы данных)
- // то проверить его роль, и в соответствии с ролью
- // открыть нужную страницу
- switch (Database.User.Role)
- {
- case "Директор":
- // Для роли Директор октрыть страницу "директор"
- NavigationService.Navigate(PageNavigation.director);
- break;
- case "Менеджер":
- NavigationService.Navigate(PageNavigation.mainPage);
- break;
- case "Администратор":
- NavigationService.Navigate(PageNavigation.mainPage);
- break;
- default:
- NavigationService.Navigate(PageNavigation.mainPage);
- break;
- }
- // На главном окне показать кнопку Мои данные
- PageNavigation.mainWindow.userInfoButton.Visibility = Visibility.Visible;
- }
- private void TextBoxInput(object sender, KeyEventArgs e)
- {
- if (textBoxLogin.Text.Length >= 4 && textBoxPassword.Password.Length >= 4)
- {
- buttonLogin.IsEnabled = true;
- }
- else
- {
- buttonLogin.IsEnabled = false;
- }
- }
- private void Label_MouseUp(object sender, MouseButtonEventArgs e)
- {
- NavigationService.Navigate(PageNavigation.registration);
- }
- }
- }
|