Вход на уровне пользователя C#

Привет, я работаю над формой входа на уровне пользователя. У каждой учетной записи есть два типа уровня пользователя. A и B, где в A - администратор, а B - сотрудник. Кажется, я не могу правильно войти в систему, потому что я все еще могу войти в форму, используя учетную запись сотрудника. Пожалуйста, посмотрите мой код.

private bool validate_login(string user, string pass, string pos) //sql check
    {
        db_connection();

        MySqlCommand cmd = new MySqlCommand();

        cmd.CommandText = "SELECT * FROM login WHERE Username=@user AND Password=@pass GROUP BY Position=@Position";
        cmd.Parameters.AddWithValue("@user", user);
        cmd.Parameters.AddWithValue("@pass", pass);
        cmd.Parameters.AddWithValue("@Position", pos);

        cmd.Connection = connect;

        MySqlDataReader login = cmd.ExecuteReader();
        if (login.Read())
        {
            connect.Close();
            return true;
        }
        else
        {
            connect.Close();
            return false;
        }
    }

 private void login_Click(object sender, EventArgs e) //LOGIN
    {
        try
        {               
            string user = textBox1.Text;
            string pass = textBox2.Text;
            string pos = "A";

            if (user == "" || pass == "")
            {
                MessageBox.Show("Did you input something? I doubt it.");
                return;
            }

            bool r = validate_login(user, pass, pos);
            /*bool s = validate_pos(pos);*/

            if (r)
            {                                   
               newMainMenu nmm = new newMainMenu();
               nmm.Show();
               this.Hide();
               logs.LogThatShit_LogIn();                                                                                                                                
            }

            else
            {
                MessageBox.Show("Wrong username and/or password!", "Login", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }
        catch (MySqlException e2)
        {
            MessageBox.Show(e2.Message);
        }
    }

Я перепробовал много запросов, но все еще не могу ответить. Подскажите, пожалуйста, что не так? Спасибо.

Что должен делать этот GROUP BY? Почему вы не добавляете позицию в фильтр?

Camilo Terevinto 20.03.2018 12:42

Нет кода, который проверяет тип пользователя. Без этого не получится

Chetan Ranpariya 20.03.2018 12:44

Я пытаюсь указать в запросе выбрать имя пользователя и пароль только с позицией A. Я пробовал SELECT * FROM login WHERE Username = "admin", Password = "1234", Position = "A", но это дает мне синтаксическую ошибку SQL.

Nox Eternal 20.03.2018 12:44
SELECT * .... GROUP BY Position - это плохой SQL psce.com/en/blog/2012/05/15/…
Raymond Nijland 20.03.2018 12:44

Если я не ошибаюсь, GROUP BY Position=@Position будет просто группироваться по TRUE / FALSE в зависимости от того, входит ли пользователь в указанную группу. В этом нет большого смысла.

Manfred Radlwimmer 20.03.2018 12:44

попробуйте следовать этому: stackoverflow.com/questions/19546906/…, вы пытались использовать счетчик в запросе sql?

user7538827 20.03.2018 12:44

@NoxEternal Хорошо, тогда объедините свои условия с AND - как вы бы сделали на любом языке и уже сделали с именем пользователя и паролем.

Manfred Radlwimmer 20.03.2018 12:44

@NoxEternal Это потому, что это должен быть WHERE Username=@Username AND Password=@Password AND Position=@Position ... не говоря уже о проблеме безопасности пароля в виде открытого текста

Camilo Terevinto 20.03.2018 12:45

Вместо Group BY введите WHERE Username = @ user AND Password = @ pass AND Position=@Position

Aman B 20.03.2018 12:45

@CamiloTerevinto попробует сейчас

Nox Eternal 20.03.2018 12:45

@CamiloTerevinto сработало !! Пожалуйста, опубликуйте свой ответ, чтобы я мог отметить его. Большое спасибо!!

Nox Eternal 20.03.2018 12:47

Опасность. Вы храните свои пароли в нехешированном (незашифрованном) виде. Если вы это сделаете, ваше приложение будут будет взломано. Сеть кишит ботами киберпреступников, которые ищут небезопасные сайты. Пожалуйста, не придумывайте собственную проверку пароля. В Dotnet есть несколько хороших примеров / шаблонов для правильного выполнения этой задачи.

O. Jones 20.03.2018 12:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
12
161
1

Ответы 1

cmd.CommandText = "SELECT * FROM login WHERE Username=@user AND Password=@pass GROUP BY Position=@Position";

напишите пожалуйста Position=@pos

Другие вопросы по теме