Существует несколько способов сделать это. Я собираюсь сделать это с помощью одного запроса, так что может показаться немного странным ...
Мы будем иметь функцию, которая будет управлять всем ...
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 ... читать/писать и т. Д.
'adminPanel.Visible = user.IsAdmin;' Будет ли место для запуска. –
Также добавлена авторизация в бэкэнд. –