| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Windows;
- using System.Windows.Controls;
- using ComputerShopWpf.Services;
- using Npgsql;
- namespace ComputerShopWpf.Views
- {
- public partial class UsersPage : Page
- {
- private readonly DatabaseService _database = new DatabaseService();
- private int _selectedUserId;
- public UsersPage()
- {
- InitializeComponent();
- RoleComboBox.SelectedIndex = 2;
- if (!UserSession.CanManageUsers())
- {
- IsEnabled = false;
- MessageBox.Show("У вас нет прав для управления пользователями.", "Пользователи", MessageBoxButton.OK, MessageBoxImage.Warning);
- return;
- }
- LoadUsers();
- }
- private void LoadUsers()
- {
- try
- {
- DataTable table = _database.ExecuteSelect(
- "SELECT user_id, login, role_name FROM app_users ORDER BY user_id;");
- UsersDataGrid.ItemsSource = table.DefaultView;
- }
- catch (Exception ex)
- {
- ShowDatabaseError(ex);
- }
- }
- private void AddButton_Click(object sender, RoutedEventArgs e)
- {
- string roleName = GetSelectedRole();
- if (string.IsNullOrWhiteSpace(LoginTextBox.Text) || string.IsNullOrWhiteSpace(NewPasswordBox.Password) || string.IsNullOrWhiteSpace(roleName))
- {
- MessageBox.Show("Введите логин, пароль и роль.", "Пользователи", MessageBoxButton.OK, MessageBoxImage.Warning);
- return;
- }
- try
- {
- _database.ExecuteNonQuery(
- "INSERT INTO app_users(login, password_hash, role_name) VALUES (@login, @password_hash, @role_name);",
- new Dictionary<string, object>
- {
- { "@login", LoginTextBox.Text.Trim() },
- { "@password_hash", PasswordHasher.ComputeSha256Hash(NewPasswordBox.Password) },
- { "@role_name", roleName }
- });
- ClearForm();
- LoadUsers();
- }
- catch (Exception ex)
- {
- ShowDatabaseError(ex);
- }
- }
- private void UpdateRoleButton_Click(object sender, RoutedEventArgs e)
- {
- if (_selectedUserId == 0)
- {
- MessageBox.Show("Выберите пользователя.", "Пользователи", MessageBoxButton.OK, MessageBoxImage.Information);
- return;
- }
- string roleName = GetSelectedRole();
- if (string.IsNullOrWhiteSpace(roleName))
- {
- MessageBox.Show("Выберите роль.", "Пользователи", MessageBoxButton.OK, MessageBoxImage.Warning);
- return;
- }
- try
- {
- _database.ExecuteNonQuery(
- "UPDATE app_users SET role_name = @role_name WHERE user_id = @user_id;",
- new Dictionary<string, object>
- {
- { "@role_name", roleName },
- { "@user_id", _selectedUserId }
- });
- LoadUsers();
- }
- catch (Exception ex)
- {
- ShowDatabaseError(ex);
- }
- }
- private void DeleteButton_Click(object sender, RoutedEventArgs e)
- {
- if (_selectedUserId == 0)
- {
- MessageBox.Show("Выберите пользователя.", "Пользователи", MessageBoxButton.OK, MessageBoxImage.Information);
- return;
- }
- if (_selectedUserId == UserSession.UserId)
- {
- MessageBox.Show("Нельзя удалить текущего пользователя.", "Пользователи", MessageBoxButton.OK, MessageBoxImage.Warning);
- return;
- }
- if (MessageBox.Show("Удалить выбранного пользователя?", "Подтверждение", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
- {
- return;
- }
- try
- {
- _database.ExecuteNonQuery(
- "DELETE FROM app_users WHERE user_id = @user_id;",
- new Dictionary<string, object> { { "@user_id", _selectedUserId } });
- ClearForm();
- LoadUsers();
- }
- catch (Exception ex)
- {
- ShowDatabaseError(ex);
- }
- }
- private void RefreshButton_Click(object sender, RoutedEventArgs e)
- {
- LoadUsers();
- }
- private void UsersDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- DataRowView row = UsersDataGrid.SelectedItem as DataRowView;
- if (row == null)
- {
- return;
- }
- _selectedUserId = Convert.ToInt32(row["user_id"]);
- LoginTextBox.Text = Convert.ToString(row["login"]);
- SelectRole(Convert.ToString(row["role_name"]));
- }
- private string GetSelectedRole()
- {
- ComboBoxItem item = RoleComboBox.SelectedItem as ComboBoxItem;
- return item == null ? null : Convert.ToString(item.Content);
- }
- private void SelectRole(string roleName)
- {
- for (int i = 0; i < RoleComboBox.Items.Count; i++)
- {
- ComboBoxItem item = RoleComboBox.Items[i] as ComboBoxItem;
- if (item != null && Convert.ToString(item.Content) == roleName)
- {
- RoleComboBox.SelectedIndex = i;
- return;
- }
- }
- }
- private void ClearForm()
- {
- _selectedUserId = 0;
- LoginTextBox.Clear();
- NewPasswordBox.Clear();
- RoleComboBox.SelectedIndex = 2;
- }
- private static void ShowDatabaseError(Exception ex)
- {
- PostgresException postgresException = ex as PostgresException;
- if (postgresException != null)
- {
- MessageBox.Show("Ошибка PostgreSQL: " + postgresException.MessageText, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
- return;
- }
- NpgsqlException npgsqlException = ex as NpgsqlException;
- if (npgsqlException != null)
- {
- MessageBox.Show("Ошибка подключения к базе данных: " + npgsqlException.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
- return;
- }
- MessageBox.Show("Ошибка: " + ex.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
- }
- }
- }
|