Хорошо, так что мой фон в VBA-Msaccess (SQL Server Backend). Развивались около 6 лет. В последнее время наша компания сильно пострадала от ограничений MsAccess, поэтому решили начать разработку на C # и интегрироваться в нашу существующую серверную часть.
Я могу довольно легко решить эту проблему, но я просто хочу убедиться, что решаю ее самым идеальным способом.
Итак, у меня есть форма входа (формы Win), которая передает имя пользователя и пароль в класс входа. Класс входа в систему затем сравнивает информацию с данными на сервере SQL и возвращает значение true или false в зависимости от того, найдена ли соответствующая запись. Внутри класса я затем настроил свойства, чтобы они содержали информацию о пользователе, то есть его уровнях разрешений.
Проблема, с которой я столкнулся, заключается в том, что это работает нормально, потому что я создаю экземпляр объекта из login.cs, тогда эти уровни разрешений содержатся только внутри созданного объекта и недоступны после страницы входа в систему. Предположительно, мне нужно хранить эту информацию о разрешениях в статической или глобальной переменной, но я просто хочу знать наиболее оптимизированный и правильно сформированный способ сделать это!
C # Форма входа
public partial class frmLogin : Form
{
public frmLogin()
{
InitializeComponent();
}
private void btnLogin_Click(object sender, EventArgs e)
{
string userName = txtUsername.Text;
string passWord = txtPassword.Text;
Login login = new Login("","");
string user = txtUsername.Text;
string pass = txtPassword.Text;
if (login.IsLoggedIn(user, pass))
{
MessageBox.Show(login.adminUser.ToString());
frmMainMenu form = new frmMainMenu();
this.Hide();
form.ShowDialog();
}
else
{
MessageBox.Show("Log in failed please try again!");
}
}
}
Login.cs
public class Login
{
public string UserName { get; set; }
public string PassWord { get; set; }
private bool aUser;
private bool tLeader;
public bool adminUser
{
get
{
return aUser;
}
set
{
aUser = value;
}
}
public bool teamLeader
{
get
{
return tLeader;
}
set
{
tLeader = value;
}
}
public Login(string user, string pass)
{
this.UserName = user;
this.PassWord = pass;
}
private void ClearText(string user, string pass)
{
user = string.Empty;
pass = string.Empty;
}
public bool IsLoggedIn(string user, string pass)
{
if (string.IsNullOrEmpty(user))
{
MessageBox.Show("Enter the user name!");
return false;
}
else
{
ConnectionStrings connstring = new ConnectionStrings();
SqlConnection sqlConn = new SqlConnection(connstring.connNameUser);
sqlConn.Open();
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = System.Data.CommandType.Text;
sqlCmd.CommandText = "SELECT username, password, door_order_admin, super_user from dbo.[user] WHERE username = @user and password = @pass";
sqlCmd.Parameters.AddWithValue("@user", user);
sqlCmd.Parameters.AddWithValue("@pass", pass);
SqlDataReader reader = sqlCmd.ExecuteReader();
if (reader.Read())
{
if (Convert.ToInt16(reader["door_order_admin"]) == 1)
{
aUser = true;
}
else
{
aUser = false;
}
if (Convert.ToInt16(reader["super_user"]) == 1)
{
tLeader = true;
}
else
{
tLeader = false;
}
return true;
}
else
{
ClearText(user, pass);
return false;
}
}
}
}
Любая помощь, указавшая меня в правильном направлении, будет очень цениться. Как я уже сказал, я хочу убедиться, что начинаю с правильной ноги, а не пишу кучу кода, только чтобы понять, что я мог бы сделать это намного лучше.
Заранее спасибо!