2017-07-09 23 views
1

PRE 我使用的SQLExpress来存储信息。如何检查当前登录的用户安全级别,以便禁用功能?

我有我的应用程序一个非常基本的用户设置。我有一个登录表,只包含三个字段,分别是用户名,密码和安全级别。只有三个安全级别;高,中,低。

在我的登录表单,我有下面的代码保存被登录到Settings.Default[]用户,所以我以后可以读取它。

private void Loginbtn_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=MySupportHub;Integrated Security=True"); 
    SqlDataAdapter sda = new SqlDataAdapter(@"SELECT * FROM [dbo].[Login] Where Username='" + usernameTextBox.Text + "' and Password='" + passwordTextBox.Text + "'", con); 
    DataTable dt = new DataTable(); 
    sda.Fill(dt); 
    if (dt.Rows.Count == 1) 
    { 
     Settings.Default["CurrentUserName"] = usernameTextBox.Text; 
     Settings.Default.Save(); 

     this.Hide(); 
     Home home = new Home(); 
     home.Show(); 
    } 
    else 
    { 
     MessageBox.Show("Invalid Username and/or Password..!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     Clearbtn_Click(sender, e); 
    } 
} 

然后在主页上,我有以下代码来获取值并在底部状态栏中显示当前登录用户。在页面加载。

//Identify and display current logged in user 

CurrentUser.Caption = Settings.Default["CurrentUserName"].ToString(); 

我想做些什么现在能够做的是检查用户的安全级别进行记录(用户价值将主窗体保存在这里“CurrentUser.Caption”)目前并能够禁用像创建一个功能新用户等

因此,我需要能够读取CurrentUser.Caption值,检查对(SQL Express)[dbo]。[登录]表,并根据结果查找用户的安全级别和限制功能。

任何帮助,将不胜感激。

感谢

菲尔

+0

你知道如何从数据表'dt'检索值吗?如果是,那么您应该从表中检索SecurityLevel的值并将其存储在默认设置中,并在任何需要的地方使用它。 –

+0

恐怕我还在学习。我将尝试在登录时取消安全值而不是主窗体,并将其显示在用户名旁边的状态栏上,然后对其进行调整。但我想我一直在考虑从特定用户的数据库中检索该信息所需的代码。我可以改变登录按钮代码来拉这个值吗?并将其设置为默认设置? –

+0

是的...你可以做到这一点。 –

回答

0

您是否在寻找

SELECT CURRENT_USER; 

SELECT SUSER_NAME(); 

,并与表中的记录检查?

1

你基本上是在实现用户的WebForms认证和授权。 “富OR 1 = 1”:

会在你的情况下,如果用户键入下面的字符串输入用户名和密码(不带引号)发生什么事?您不得连接数据库CRUID操作中的字符串以防止SQL注入。

我会建议你使用FormsAuthentication和含有用户角色加密的门票,而不是明文存储密码,甚至加密,但使用PBKDF2和加密盐,而商店哈希值。但是你可能不关心生产环境,这可能只是一个学习的例子。在这种情况下,您仍然不想练习在实际应用程序中永远不会使用的内容,即将用户控件的值与存储在表中的权限进行匹配。可以在客户端(浏览器)更改值并欺骗系统。

获取与FormsAuthentication夹具和使用User.Identity.IsInRole将是一个方式来进行,你可以检查这个微软文档教程之一:https://support.microsoft.com/en-us/help/301240/how-to-implement-forms-based-authentication-in-your-asp.net-applicatio

我想你想获得行业有效的技能实现认证和在asp.net网络环境中进行授权。如果这是你问题背后的目标,那么很可能需要你花时间学习所有这些,同时你需要学习asp.net标识,它可以为你处理很多事情。

在这两种情况下它会带你很长的时间来开发你的应用程序,而无需使用实体框架,除非您使用Identity你必须去实现自己的安全特性,特别是高品质的一个很长的路要走。相信我,我一直在那里,做到了。

将会有一个学习曲线,但前进的最好方法是使用EF为您节省大量时间,还ASP.NET身份为现今相关的技能,也为您节省大量时间。值得比较Web窗体和MVC,MVC是动态全功能现代应用程序的更好选择。

我希望能有一个简单的回答你的问题,但解决这一问题,你打算的方式不会帮助你在所有的未来,它不会在实际应用中使用。

答案是主观的,但在我看来,你可以重新开始使用MVC,EF和Identity,它需要你花时间学习正确的方式来做你现在打算做的事情,但它会为您提供未来可以在生产环境中使用的技能,而且概念不仅限于ASP.NET。学习曲线。

+0

我不打算使用asp.net进行工作。我已经修改了一些我的代码在登录上使用组合框验证用户名,密码和现在的安全级别。所以输入“foo OR 1 = 1”而不用引号时,输入用户名和密码时不会执行任何操作。但我确实看到你的来源,并计划在未来学习更多,以更好地保护用户数据。感谢您的帮助和建议。我会通读链接。 –

相关问题