2016-03-10 2 views
0

Я делаю заявку на участие в аукционе (WPF) в Visual Studio, которая должна быть связана с базой данных, созданной на SQL Server 2014. Это приложение является частью задания, поэтому мне нужно следуйте некоторым правилам.Как установить ограничения в коде на основе привилегий базы данных

Тот, с которым мне нужна помощь, касается установки ограничений, основанных на роли. Я база данных, у меня есть таблица со столбцом isAdmin (значение 1, если пользователь admin или 0, если нет). В Visual Studio мне нужно создать пользовательский интерфейс, в котором пользователи могут войти в систему до того, как они получат доступ к главному аукциону. В базе данных у меня также есть список пользователей (у каждого есть имя пользователя и пароль, которые им нужно использовать для входа в систему, и значение isAdmin).

Когда они входят в систему как администратор, у них есть доступ к кнопкам управления для добавления или удаления предметов с аукциона; при регистрации в качестве пользователя они могут только делать ставки; гость может посмотреть только на аукционе.

Мне нужна помощь в написании кода, чтобы пользователи могли входить в систему и основываться на их значении isAdmin и иметь доступ к кнопкам в главном окне аукциона.

+3

'adminPanel.Visible = user.IsAdmin;' Будет ли место для запуска. –

+1

Также добавлена ​​авторизация в бэкэнд. –

ответ

1

Существует несколько способов сделать это. Я собираюсь сделать это с помощью одного запроса, так что может показаться немного странным ...

Мы будем иметь функцию, которая будет управлять всем ...

public bool login(string user, string password, ref string isAdmin) { }

Это будет функция я буду использовать. Внутри функции мы собираемся теперь получить доступ к базе данных и проверить, чтобы человек ввел правильные учетные данные. Я собираюсь предположить, что вы уже настроили свое SQL-соединение (которое я буду называть myConnection ... если вам нужна помощь только в этом комментарии).

public bool login(string user, string password, ref string isAdmin){   

    //This is used so we know if we entered the while loop... 
    bool success = false; 

    //This is what I am going to use to execute commands 
    myCommand = new SqlCommand("SELECT isAdmin FROM users WHERE user = @user AND pass = @pass", myConnection); 
    myCommand.Parameters.Addwithvalue("@user", user); 
    myCommand.Parameters.Addwithvalue("@pass", password); 

    try 
    { 
     //Open connection 
     myConnection.Open(); 

     //Execute the reader 
     myReader = myCommand.ExecuteReader(); 

     //Read the data now 
     while(myReader.Read()) 
     { 
      //isAdmin could very well be an int and myReader could convert to int instead of string 
      isAdmin = myReader[0].ToString(); 

      success = true; 
     } 

     //Close connection 
     myConnection.Close(); 
    } 
    catch 
    { 
     //Error checking 
     myConnection.Close(); 
     return false; 
    } 

    if(success) 
    { 
     //Login worked - credentials were right 
     return true; 
    } 
    //Login failed - credentials were wrong 
    return false; 
} 

Теперь у вас есть вся необходимая информация. Если возвращаемое значение истинно, вы знаете, что пользователь вошел в систему, и у вас есть значение isAdmin из строки ref в функции. Довольно легко отсюда. Отключите или включите соответствующие кнопки.

EDIT 1

Это ответ на ваш комментарий -

Это очень помогает! Однако мне нужна дополнительная помощь с разрешениями. Скажите теперь, что «Пользователь X» зарегистрирован (например, без прав администратора) и просматривает главное окно аукциона. Мне сложно вставить Panel Control и установить видимость на false в этом случае. Как определить текущие права пользователя? Мне также сложно добавить столбец в таблицу пользователей с идентификационным ключом, чтобы упростить ссылку. Вам нужно написать функцию для определения текущих прав пользователя или вы можете использовать простой оператор IF, чтобы установить видимость панели? - Tomislav Bijelic 13 часов назад

Да, вы могли бы использовать оператор IF. Функция получает вас 1 или 0 (admin или не admin) в строке isAdmin = myReader[0].ToString();. Поскольку isAdmin is ref, он будет автоматически сохранен в том, что вы использовали в вызове функции. Если вы хотите получить доступ к нему в другой форме, вы можете просто передать переменную, когда вы объявите новую «форму», чтобы ее открыть. Пример того, что я имею в виду это было бы ...

///////////////AUCTION MAIN WINDOW START/////////////////////// 
//Global variable 
string strIsAdmin; 

public frmAuctionMainWindow(string isAdmin) 
    { 
     InitializeComponent(); 

     strIsAdmin = isAdmin; 
    } 
//strIsAdmin tells you whther or not they are admin so on form load just make them visible or not visible accordingly... 

private frmAuctionMainWindow_Load(object sender, EventArgs e) 
{ 
    if(strIsAdmin == "1") 
    { 
     //User is admin 
    }  
    else if(strIsAdmin == "0") 
    { 
     //User is not admin...(could use else statement if only logged users are visiting this form 
    } 
} 


///////////////AUCTION MAIN WINDOW END/////////////////////// 


///////////////LOGIN FORM START////////////////////////////// 

    //Button could only be visible to people who have access (logged in users) 
private void btnOpenMain(object sender, EventArgs e) 
{ 
    frmAuctionMainWindow main = new frmAuctionMainWindow(isAdmin); 
    main.Show(); //Or main.ShowDialog(); depending on what you want 

} 

///////////////LOGIN FORM END//////////////////////////////// 

Если вы хотите, чтобы каждый мог получить доступ главного окна аукциона, то вы хотите отправить в другой переменной говорить форму или не зарегистрирован пользователь в.Легкое исправление для гостя имеет отдельную форму, которая является только представлением, и одна форма, которая предназначена для входа в систему только для пользователей.

Edit 2

нравится Кроме того, что другой пользователь сказал, что вы должны сделать свой доступ DB в интерфейсе. Вы можете сделать класс, который делает все с помощью DB ... читать/писать и т. Д.

+1

Это очень помогает! Однако мне нужна дополнительная помощь с разрешениями. Скажите теперь, что «Пользователь X» зарегистрирован (например, без прав администратора) и просматривает главное окно аукциона. Мне сложно вставить Panel Control и установить видимость на false в этом случае. Как определить текущие права пользователя? Мне также сложно добавить столбец в таблицу пользователей с идентификационным ключом, чтобы упростить ссылку. Вам нужно написать функцию для определения текущих прав пользователя или вы можете использовать простой оператор IF, чтобы установить видимость панели? –

+0

@TomislavBijelic Добавлено редактирование моего ответа для вашего комментария. – CodyMR

Смежные вопросы