检查数据库中的用户类型
本文关键字:用户 类型 数据库 检查 | 更新日期: 2023-09-27 18:11:19
我想检查用户是Staff还是Admin。如果用户是员工,我想禁用或隐藏其他表单的一些按钮或功能。
loginsql中的SELECT Username FROM tblAccount
,以便我可以向其他表单显示谁是当前用户。
private void btnConfirm_Click(object sender, EventArgs e)
{
//DO: User authentacation
con.Open();
string loginsql = "SELECT Username FROM tblAccount WHERE Username = '" + txtUser.Text + "' COLLATE SQL_Latin1_General_CP1_CS_AS AND Password = '" + txtPass.Text + "' COLLATE SQL_Latin1_General_CP1_CS_AS AND EmpStatus = 'Active'";
SqlDataAdapter loginda = new SqlDataAdapter(loginsql, con);
DataTable logindt = new System.Data.DataTable();
loginda.Fill(logindt);
if (logindt.Rows.Count == 1)
{
MessageBox.Show("Login Successfully", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
HomeForm home = new HomeForm(logindt.Rows[0][0].ToString());
home.Show();
this.Hide();
}
else if (txtUser.Text == "" && txtPass.Text == "")
{
MessageBox.Show("Enter your username and password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if(txtUser.Text == "")
{
MessageBox.Show("Enter your username", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if(txtPass.Text == "")
{
MessageBox.Show("Enter your password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Invalid Username and Password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtUser.Clear();
txtPass.Clear();
txtUser.Focus();
}
con.Close();
}
你应该创建
-
角色表id->foreignKey loginsql的id角色(类型为Boolean)->例如Staff=0或Admin=1
-
officiate表,提供一些访问,如删除插入更新…为用户当用户登录时,您现在可以查看他的角色(是管理员还是员工?)以及他是否有权查看此页面!
再创建两个表,tblAccount已经存在,其中包含了用户的信息,现在再创建两个名为tblRoles &;tblAccountRoles。tblRoles将包含所有角色及其主键,例如1-Admin,2-staff等。tblAccountRoles将包含分配给所有用户的角色,例如:1- jeff - 1(admin), 2-zepp -2(staff)等等。现在,在您的代码中,首先通过查询tblAccount表检查用户的登录是否成功,如果成功,则检查tblAccountRoles表并获取登录用户的id。您将获得1为管理员,2为员工,然后您可以将acc编码为您获得的角色id。如果用户的角色id是admin,即1,则可以显示所有控件。你的问题很基本,很容易在网上搜到。做更多的搜索,你会发现很多解决这个问题的方法。
string loginsql = "SELECT Username, UserType FROM tblAccount WHERE Username = '" + txtUser.Text + "' COLLATE SQL_Latin1_General_CP1_CS_AS AND Password = '" + txtPass.Text + "' COLLATE SQL_Latin1_General_CP1_CS_AS AND EmpStatus = 'Active'";
SqlDataAdapter loginda = new SqlDataAdapter(loginsql, con);
DataTable logindt = new System.Data.DataTable();
loginda.Fill(logindt);
if (logindt.Rows.Count == 1)
{
Session["UserType"] = logindt.Rows[0][1].ToString();
MessageBox.Show("Login Successfully", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
HomeForm home = new HomeForm(logindt.Rows[0][0].ToString());
home.Show();
this.Hide();
}
当你想使用UserType来隐藏一些信息时,使用以下命令:
string userType = Session["UserType"].ToString();
if(userType == "Staff")
{
//Show Some data related to Staff
}
else if (userType == "Admin")
{
//Show Some Data related to Admin
}
我还没有测试代码,只是把我的代码添加到你现有的,所以请做测试,让我知道。但我给出了如何使用现有表等实现它的基本概念。但你必须在数据库表中有'UserType'列才能让它工作。
最好的方法是在Database中创建一个Role表:
Table Roles
Role_ID | Role_Desc
关系的另一个表
Table User_Roles
User_ID | Role_ID
然后将User_ID和Role_ID存储在第三个表中,并访问它以获得相应的角色。如果有任何疑问,请告诉我。