Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/140: Рейтинг темы: голосов - 140, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 5

Авторизация с разными ролями

12.06.2019, 15:45. Показов 27646. Ответов 11

Студворк — интернет-сервис помощи студентам
Добрый день всем, столкнулась с проблемой, гугл ничего нормального не дал (либо я тупенькая, что не могу додуматься), тем не менее уже неделю ломаю голову над этим.
Есть бд MySql - удаленная.
Есть формы для админа и для юзера.
Проблема с авторизацией.
В таблице юзеров есть поля: фамилия, имя, отчество, мыло, логин, пароль, роль (Администратор или Пользователь)
В чем суть проблемы:
Человек вводит свои данные, которые есть в таблице: логин и пароль
Нужно написать код, который по введенным данным определит какая роль у этого человека и открыть соответствующую для этого человека форму.
На данный момент имеется проверка логина/пароля, но как туда воткнуть роль, чтобы открывались разные формы - не знаю.
Помогите! Заранее спасибо за помощь♥
Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 private bool Check_boxes_filed()
        {
            if (log.Text.Length == 0)
            {
                MessageBox.Show("Введите логин");
                log.Focus();
                return false;
            }
            if (pass.Text.Length == 0)
            {
                MessageBox.Show("Введите пароль");
                pass.Focus();
                return false;
            }
            return true;
        }
        private bool Validate_password()
        {
            conn = new MySqlConnection(webAppConnection_string);
            conn.Open();
 
            string query_str = "SELECT COUNT( * )" +
                   "FROM userregistration " +
                   "WHERE username='" + MySql.Data.MySqlClient.MySqlHelper.EscapeString(log.Text) +
                   "' AND password='" + MySql.Data.MySqlClient.MySqlHelper.EscapeString(pass.Text) + "'";
 
            cmd = new MySqlCommand(query_str, conn);
 
            MySqlConnection myConnection = new MySqlConnection(webAppConnection_string);
            MySqlCommand myCommand = new MySqlCommand(query_str, myConnection);
 
            myConnection.Open(); //Устанавливаем соединение с базой данных.
            long loginPasswordExists = (long)myCommand.ExecuteScalar();                    
            myConnection.Close(); //Обязательно закрываем соединение!            
            if (loginPasswordExists == 1)
            {
                return true;
            }
            MessageBox.Show("Пользователь не найден");
            return false;
        } 
private void Login_Click(object sender, EventArgs e)
        {
            if (!this.Check_boxes_filed())
            {
                return;
            }
            if (!this.Validate_password())
            {
                return;
            }
         }
На скринах - авторизация, форма админа, форма юзера
Миниатюры
Авторизация с разными ролями   Авторизация с разными ролями   Авторизация с разными ролями  

0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.06.2019, 15:45
Ответы с готовыми решениями:

Вход в базу под разными ролями
Помогите пожалуйста. весь мозг сломала. имеется база данных. в ней таблица сотрудники (логин, ФИО, должность, отдел). Подразумевается...

Авторизация ролями
Люди помогите!Вообще не могу разобраться с принципом работы!Как реализовать Роли? Аутентификация осуществляется при помощи форм, база...

Работа с ролями
Не понимаю почему вылезает ошибка Ошибка в ограничении доступа к данным. объект: 'Документ.Форма1'; право: 'Чтение' {(1, 42)}: Не...

11
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
12.06.2019, 19:11
Лучший ответ Сообщение было отмечено nooccar как решение

Решение

nooccar, Вот вам класс. Для работы с MySql.
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using MySql.Data.MySqlClient;
using System;
using System.Data;
using System.Windows.Forms;
class MySqlHelper
    {
        private static string stringConnection;
        private static MySqlDataAdapter MySql_dataAdapter;
        private static MySqlConnection MySql_connect;
        private static MySqlCommand MySql_command;
 
        /// <summary>
        /// Возвращает текущую виртуальную таблицу.
        /// </summary>
        public static DataTable Table { get; private set; }
 
        /// <summary>
        /// Строка подключения к базе данных
        /// </summary>
        public static string DataBaseConnection
        {
            set
            {
                stringConnection = value;
 
                //Строка для подключение к базе данных.
                MySql_connect = new MySqlConnection(stringConnection);
 
                //Открываем соединение с базой данных.
                MySql_connect.Open();
            }
        }
 
        /// <summary>
        /// Выполняет запрос к базе данных
        /// </summary>
        /// <param name="script">Скрипт запроса(INSERT, UPDATE, DELETE)</param>
        public static void Execut(string script)
        {
            try
            {
                //Открываем соединение с базой данных.
                MySql_connect.Open();
                MySql_command = MySql_connect.CreateCommand();
                MySql_command.CommandText = script;
                MySql_command.ExecuteNonQuery();
                CloseDB();
            }
            catch (Exception ex) { CloseDB(); MessageBox.Show(ex.Message); }
        }
 
        /// <summary>
        /// Выполняет запрос к базе данных и возвращает DataTable
        /// </summary>
        /// <param name="script">Скрипт запроса(INSERT, UPDATE, DELETE)</param>
        /// <param name="SelectScript">Скрипт запроса(SELECT)</param>
        /// <returns></returns>
        public static DataTable Execut(string script, string SelectScript)
        {
            try
            {
                MySql_connect.Open();
                MySql_command = MySql_connect.CreateCommand();
                MySql_command.CommandText = script;
                MySql_command.ExecuteNonQuery();
                return RunQuery(SelectScript);
            }
            catch (Exception ex) { CloseDB(); MessageBox.Show(ex.Message); return Table; }
        }
 
        /// <summary>
        /// Выполняет запрос к базе данных и возвращает DataTable
        /// </summary>
        /// <param name="script">Скрипт запроса(SELECT)</param>
        public static DataTable RunQuery(string script)
        {
            try
            {
                MySql_dataAdapter = new MySqlDataAdapter(script, MySql_connect);
                Table = new DataTable();
                MySql_dataAdapter.Fill(Table);
                CloseDB();
            }
            catch (Exception ex) { CloseDB(); MessageBox.Show(ex.Message); }
 
            return Table;
 
        }
 
        /// <summary>
        /// Возвращает значение ячейки.
        /// </summary>
        /// <param name="col">Индекс столбца</param>
        /// <param name="row">Индекс строки</param>
        /// <returns></returns>
        public static object GetCellValue(int col, int row)
        {
           return Table.Rows.Count != 0 ? Table.Rows[row].ItemArray[col] : 0;
        }
 
        /// <summary>Закрывает соединение с базой данных
        /// 
        /// </summary>
        public static void CloseDB()
        {
            //Закрываем соединение с бд
            if (MySql_connect != null)
                MySql_connect.Close();
        }
    }

Как пользоваться.
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
          //Создаем событие при первом старте программы
          private void Form1_Load(object sender, EventArgs e)
          {
               MySqlHelper.DataBaseConnection = "Строка подключения";
          }
 
        //Событие происходит всякий раз, при нажатие на кнопку "Авторизация"
        private void BtnAuthorization_Click(object sender, EventArgs e)
        {
            Authorization(log.Text, pass.Text, out object role);
            if (role.ToString() != "0")
            {
                if (role.ToString() == "Пользователь")
                {
                    //Если (Пользователь)
                }
                else
                {
                    //Если (Администратор)
                }
            }
            else
                MessageBox.Show("Пользователь не найден");
 
        }
 
 
        /// <summary>
        /// Метод выполняет авторизацию.
        /// </summary>
        /// <param name="login">Логин</param>
        /// <param name="password">Пароль</param>
        /// <param name="role">Возвращает роль юзера</param>
        private void Authorization(string login, string password, out object role)
        {
            // В вашей бд должна быть колонка с любым названием. Я назвал (role), тип ее на ваше усмотрение. int, string, nvarchar и.т.п
            MySqlHelper.RunQuery($@"SELECT role
                                           FROM userregistration
                                     WHERE username='{login}' AND password='{password}'");
            //Получаем значение ячейки, Где 1 - это колонка, где - 0 это строка
            role = MySqlHelper.GetCellValue(1, 0);
        }


Если после запроса нужно вывести в таблицу, то так.
C#
1
2
MySqlHelper.RunQuery("SELECT * FROM userregistration");
dgv.DataSource = MySqlHelper.Table;
//Или так
Если после запроса нужно вывести в таблицу, то так.
C#
1
dgv.DataSource = MySqlHelper.RunQuery("SELECT * FROM userregistration");
1
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 5
12.06.2019, 19:37  [ТС]
Цитата Сообщение от Kazbek17 Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
private void BtnAuthorization_Click(object sender, EventArgs e)
{
Authorization(log.Text, pass.Text, out object role);
 if (role.ToString() != "0")
 {
if (role.ToString() == "Пользователь")
{
//Если (Пользователь)
 }
. . .
- Недопустимый термин "object" в выражении
- Ну и далее имя (у меня charact, у вас role) не существует в текущем контексте
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
12.06.2019, 21:49
nooccar, либо выбери версию фреймворка 4.5+, либо перепиши вот так
C#
1
2
3
4
5
6
7
8
9
10
11
private void BtnAuthorization_Click(object sender, EventArgs e)
{
object role;
Authorization(log.Text, pass.Text, out role);
 if (role.ToString() != "0")
 {
if (role.ToString() == "Пользователь")
{
//Если (Пользователь)
 }
. . .
0
0 / 0 / 0
Регистрация: 08.11.2019
Сообщений: 36
04.11.2021, 13:20
А можешь пожалуйста для примера скинуть свою работу?
Хочется посмотреть пару моментов?
0
0 / 0 / 0
Регистрация: 24.06.2022
Сообщений: 4
26.07.2022, 08:47
Бодрый день, выдает ошибку на это строке, после удачного ввода логина и пароля.

return Table.Rows.Count != 0 ? Table.Rows[row].ItemArray[col] : 0;


System.IndexOutOfRangeException
HResult=0x80131508
Сообщение = Index was outside the bounds of the array.
Источник = baza
Трассировка стека:
в MySqlHelper.GetCellValue(Int32 col, Int32 row) в D:\проект\baza\baza\baza\DB.cs:строка 76
в baza.Form1.Authorization(String login, String pass, Object& role) в D:\проект\baza\baza\baza\Form1.cs:строка 65
в baza.Form1.button1_Click(Object sender, EventArgs e) в D:\проект\baza\baza\baza\Form1.cs:строка 31
в System.Windows.Forms.Control.OnClick(Eve ntArgs e)
в System.Windows.Forms.Button.OnClick(Even tArgs e)
в System.Windows.Forms.Button.OnMouseUp(Mo useEventArgs mevent)
в System.Windows.Forms.Control.WmMouseUp(M essage& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Mes sage& m)
в System.Windows.Forms.ButtonBase.WndProc( Message& m)
в System.Windows.Forms.Button.WndProc(Mess age& m)
в System.Windows.Forms.Control.ControlNati veWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNati veWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callba ck(IntPtr hWnd, WM msg, IntPtr wparam, IntPtr lparam)
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
26.07.2022, 12:38
notepc, в методе Authorization в форме измените строку
C#
1
role = MySqlHelper.GetCellValue(1, 0);
на
C#
1
role = MySqlHelper.GetCellValue(0, 0);
1
0 / 0 / 0
Регистрация: 24.06.2022
Сообщений: 4
27.07.2022, 00:00
Спасибо помогло, но теперь Админ с ролью 1 заходит, а Пользователь с ролью 0 нет, Пользователь не найден.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
27.07.2022, 08:44
notepc, так покажите, как Вы реализовали у себя. Какой код брали, куда его копировали?
0
0 / 0 / 0
Регистрация: 24.06.2022
Сообщений: 4
28.07.2022, 00:29
Это код события кнопки

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using Microsoft.SqlServer.Management.Smo;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace baza
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        //Создаем событие при первом старте программы
        private void Form1_Load(object sender, EventArgs e)
        {
            MySqlHelper.DataBaseConnection = "server=localhost;port=3306;username=root;password=root;database=baza";
        }
 
        //Событие происходит всякий раз, при нажатие на кнопку "Авторизация"
        private void button1_Click(object sender, EventArgs e)
        {
            Authorization(BoxLogin.Text, BoxPass.Text, out object role);
            if (role.ToString() != "0")
            {
                if (role.ToString() == "Пользователь")
                {
                    this.Hide();
                    MainUser mainuser = new MainUser();
                    mainuser.Show();
                }
                else
                {
                    this.Hide();
                    MainForm mainform = new MainForm();
                    mainform.Show();
                }
            }
            else
                MessageBox.Show("Пользователь не найден");
 
 
        }
 
 
        /// <summary>
        /// Метод выполняет авторизацию.
        /// </summary>
        /// <param name="login">Логин</param>
        /// <param name="pass">Пароль</param>
        /// <param name="role">Возвращает роль юзера</param>
        private void Authorization(string login, string pass, out object role)
        {
            // В вашей бд должна быть колонка с любым названием. Я назвал (role), тип ее на ваше усмотрение. int, string, nvarchar и.т.п
            MySqlHelper.RunQuery($@"SELECT role
                                           FROM users
                                     WHERE login='{login}' AND pass='{pass}'");
            //Получаем значение ячейки, Где 1 - это колонка, где - 0 это строка
            role = MySqlHelper.GetCellValue(0, 0);
        }
 
        
       
    }
}
Подключение к базе

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using MySql.Data.MySqlClient;
using System;
using System.Data;
using System.Windows.Forms;
class MySqlHelper
{
    private static string stringConnection;
    private static MySqlDataAdapter MySql_dataAdapter;
    private static MySqlConnection MySql_connect;
    private static MySqlCommand MySql_command;
 
    
    public static DataTable Table { get; private set; }
 
    
    public static string DataBaseConnection
    {
        set
        {
            stringConnection = value;
 
            MySql_connect = new MySqlConnection(stringConnection);
 
            MySql_connect.Open();
        }
    }
 
    
    public static void Execut(string script)
    {
        try
        {
            MySql_connect.Open();
            MySql_command = MySql_connect.CreateCommand();
            MySql_command.CommandText = script;
            MySql_command.ExecuteNonQuery();
            CloseDB();
        }
        catch (Exception ex) { CloseDB(); MessageBox.Show(ex.Message); }
    }
 
    
    public static DataTable Execut(string script, string SelectScript)
    {
        try
        {
            MySql_connect.Open();
            MySql_command = MySql_connect.CreateCommand();
            MySql_command.CommandText = script;
            MySql_command.ExecuteNonQuery();
            return RunQuery(SelectScript);
        }
        catch (Exception ex) { CloseDB(); MessageBox.Show(ex.Message); return Table; }
    }
 
    
    public static DataTable RunQuery(string script)
    {
        try
        {
            MySql_dataAdapter = new MySqlDataAdapter(script, MySql_connect);
            Table = new DataTable();
            MySql_dataAdapter.Fill(Table);
            CloseDB();
        }
        catch (Exception ex) { CloseDB(); MessageBox.Show(ex.Message); }
 
        return Table;
 
    }
 
   
    public static object? GetCellValue(int col, int row)
    {
        return Table.Rows.Count != 0 ? Table.Rows[row].ItemArray[col] : 0;
    }
 
    
    public static void CloseDB()
    {
       if (MySql_connect != null)
            MySql_connect.Close();
    }
}
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
28.07.2022, 06:11
notepc, значение в таблице должны быть не числовые. Или Пользователь или Администратор. Если вы хотите проверку по числовому значению, то измените условие проверки.
0
0 / 0 / 0
Регистрация: 24.06.2022
Сообщений: 4
28.07.2022, 07:18
Большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.07.2022, 07:18
Помогаю со студенческими работами здесь

Проблема с ролями
Здравствуйте, проблема вот чем, создавал роли и пользователей, добавил роль администратор которой дал все права и создал пользователя с...

Управление ролями пользователей
Добрый день! В веб-приложении есть страница, на которой администратор может просмотреть все учетные записи. А также назначить роль...

Что не так с ролями?
Добрый день. надо дать доступ человеку к отчёту. иду в роль, которая (в том числе) есть у этого человека, включаю её права на отчёт. ...

Проблема с ролями в Asp net Identity
Здравствуйте. Начал изучать Asp Net Identity. И решил сделать следующее. У меня есть список ролей, которые можно пополнять, и я хочу менять...

Два сервера с ролями контроллера доменов
Доброго времени суток, товарищи. У меня вопрос. У нас не такой большой отдел, 35 машин и все работают просто в рабочей группе. Я же,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru