//Обработчик события нажатия на кнопку "Удалить учетную запись" private void BtnRemove_Click(object sender, RoutedEventArgs e) { object o; //Проверка не выполнен ли выбор пользователь для удаления if (dgUsersAccounts.SelectedIndex == -1) { MessageBox.Show("Выберите пользователя для удаления"); } //Если пользователь выбран else if (SQLCon.ExecuteScalar("SELECT COUNT(*) FROM tblAccounts WHERE IsAdmin='True'", out o)) { //Если выбран-пользователь администратор для удаления и он один if (lstaccounts[dgUsersAccounts.SelectedIndex].Type == "Администратор" && (int)o == 1) { MessageBox.Show("Вы не можете удалить эту учетную запись, так как это единственная учетная запись администратора."); } //Если выбран пользователь или существует несколько администраторов else if (MessageBox.Show("Вы действительно хотите удалить эту учетную запись?", "Удаление", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { //Удаление записи о пользователе в БД string userName = lstaccounts[dgUsersAccounts.SelectedIndex].Name; SQLCon.ExecuteScalar($"DELETE FROM tblAccounts WHERE UserName='******'"); //Удаление из списка lstaccounts пользователя lstaccounts.RemoveAt(dgUsersAccounts.SelectedIndex); dgUsersAccounts.Items.Refresh(); } } }
//Метод для добавления всех найденных пользователей из БД в DataGrid private void AddAccounts() { dgUsersAccounts.ItemsSource = lstaccounts; //Получение значений из таблицы БД foreach (DataRow row in SQLCon.GetDateTable("SELECT UserName, IsAdmin FROM tblAccounts").Rows) { if (!(bool)row["IsAdmin"]) { lstaccounts.Add(new Account(row["UserName"] as string, "Пользователь")); } else { lstaccounts.Add(new Account(row["UserName"] as string, "Администратор")); } } }
/// <summary> ///Событие нажатия на кнопку окна "Вход" /// </summary> private void BtnLogin_Click(object sender, RoutedEventArgs e) { //Проверка корректности введеного логина if (!User.IsCorrectName(tbxUserName.Text, out string message)) { MessageBox.Show(message); tbxUserName.Focus(); } //Проверка введен ли пароль else if (string.IsNullOrEmpty(pbxPassword.Password)) { MessageBox.Show("Введите пароль!"); pbxPassword.Focus(); } else { //Проверка подключения к БД if (!SQLCon.ConnectToDatabase()) { Close(); } //Получим хэш-пароль, применив алгоритм ГОСТ 34.11-2012 byte[] password = Encoding.GetEncoding(1251).GetBytes(pbxPassword.Password); GOST o = new GOST(512 /*256*/); byte[] hash_code = o.H(password); string hashpassword = BitConverter.ToString(hash_code); //Получаем таблицу с учетными данными пользователя из БД, где найдутся такой логин и пароль в одной строке DataTable dateTable = SQLCon.GetDateTable($"SELECT * FROM tblAccounts WHERE UserName='******' AND Password='******';"); if (dateTable != null && dateTable.Rows.Count != 0) { User.Name = dateTable.Rows[0]["UserName"] as string; User.Password = dateTable.Rows[0]["Password"] as string; User.IsAdmin = (bool)dateTable.Rows[0]["IsAdmin"]; AccessWindow accessWindow = new AccessWindow(); Close(); accessWindow.ShowDialog(); //MessageBox.Show("Доступ разрешен."); } else { MessageBox.Show("Доступ запрещен. Введен невенрный логин или пароль."); } } }
public MainWindow() { InitializeComponent(); if (!SQLCon.ConnectToDatabase()) { Close(); } //Если в таблице аккаунтов нет записей (т.е. самый первый вход), то переход на окно регистрации администратора //"SELECT COUNT(*) FROM tblAccounts"-запрос на количество всех записей в таблице if (SQLCon.ExecuteScalar("SELECT COUNT(*) FROM tblAccounts", out object o) && (int)o == 0) { Registration startWindow = new Registration(true, false); startWindow.ShowDialog(); if (!startWindow.Success) { Close(); } } }
//Обработчик события нажатия на кнопку "Зарегистрировать"/"Изменить пароль" private void BtnLogin_Click(object sender, RoutedEventArgs e) { object o; //Проверка на заполненость всех полей ввода if (!IsChangePassword && !User.IsCorrectName(tbxName.Text, out string message)) { MessageBox.Show(message); tbxName.Focus(); } else if (string.IsNullOrEmpty(pbxPassword1.Password)) { MessageBox.Show("Введите пароль!"); pbxPassword1.Focus(); } else if (string.IsNullOrEmpty(pbxPassword2.Password)) { MessageBox.Show("Повторите пароль!"); pbxPassword1.Focus(); } //Проверка на совпадение введенных паролей else if (pbxPassword1.Password != pbxPassword2.Password) { MessageBox.Show("Пароли не совпадают!"); pbxPassword1.Focus(); } //Если пройдены все предварительные проверки, выполнение регистрации else if (SQLCon.ExecuteScalar($"SELECT COUNT(*) FROM tblAccounts WHERE UserName='******'", out o)) { //Проверка на наличие в БД пользователя с таким же логином(по sql-запросу выше) if (!IsChangePassword && (int)o != 0) { MessageBox.Show("Пользователь с таким именем уже существует."); } else { //Получим хэш-пароль, применив алгоритм ГОСТ 34.11-2012 byte[] password = Encoding.GetEncoding(1251).GetBytes(pbxPassword1.Password); GOST g = new GOST(512 /*256*/); byte[] hash_code = g.H(password); string hashpassword = BitConverter.ToString(hash_code); //Запись учет.данных администратора/пользователя в таблицу БД if (!IsChangePassword && (int)o == 0) { if (SQLCon.ExecuteScalar($"INSERT INTO tblAccounts (UserName, Password, IsAdmin) VALUES ('{tbxName.Text}', '{hashpassword}', '{AsAdmin}')")) { MessageBox.Show("Регистрация успешно завершена."); Success = true; Close(); } } //Изменение хэш-кода пароля в БД на новый else if (IsChangePassword) { if (hashpassword == User.Password) { MessageBox.Show("Введенный пароль совпадает с текущим. Необходимо ввести новый пароль"); } else { SQLCon.ExecuteScalar(string.Format("UPDATE tblAccounts SET Password='******' WHERE [UserName]='{1}'", hashpassword, User.Name)); User.Password = hashpassword; MessageBox.Show("Пароль изменен."); Success = true; MainWindow mainWindow = new MainWindow(); Close(); mainWindow.Show(); } } } } }