2016-01-25 25 views
-2

我有这个代码有问题。它是登录软件。我想限制每个员工的一些辅助功能。但它不起作用。实际上,我在menu加载时制作了enabled=false所有选项。我应该如何使用c#编写登录代码?

这是窗体后面的代码。形式有2 textboxes,它们中的一个是用于username,另一个是用于password和具有一个Enter按钮。

private void Enter_Click(object sender, EventArgs e) 
    { 
     if (txtPassword.Text == "10") 
     { 
      FormMenu a = new FormMenu(); 
      this.Hide(); 

      a.EmployeManagement.Enabled = true; 
      a.Sabtenam.Enabled = true; 
      a.Shora.Enabled = true; 
      a.HozorGhiab.Enabled = true; 
      a.Ketabkhane.Enabled = true; 
      new FormMenu().Show(); 
      a.Refresh();     
     } 
     else 
      if (txtPassword.Text == "20") 
      { 
       FormMenu a = new FormMenu(); 
       this.Hide(); 

       a.Sabtenam.Enabled = true; 
       a.HozorGhiab.Enabled = true; 
       new FormMenu().Show(); 
      } 
      else 
       if (txtPassword.Text == "30") 
       { 
        FormMenu a = new FormMenu(); 
        this.Hide(); 

        a.Shora.Enabled = true; 
        new FormMenu().Show(); 
       } 
        else 
        if (txtPassword.Text == "40") 
        { 
         FormMenu a = new FormMenu(); 
         this.Hide(); 

         a.HozorGhiab.Enabled = true; 
         new FormMenu().Show(); 
        } 
        else 
         if (txtPassword.Text == "50") 
         { 
          FormMenu a = new FormMenu(); 
          this.Hide(); 

          a.Shora.Enabled = true; 
          new FormMenu().Show(); 
         } 
         else 
          if (txtPassword.Text == "60") 
          { 
           FormMenu a = new FormMenu(); 
           this.Hide(); 

           a.Ketabkhane.Enabled = true; 
           new FormMenu().Show(); 
          } 
          else 
           MessageBox.Show("Invalid username or password"); 



    } 
+0

不要硬编码密码。 [哈希](https://crackstation.net/hashing-security.htm)。然后使用[RBAC](https://en.wikipedia.org/wiki/Role-based_access_control)模式来定义菜单可访问性。 – Martheen

回答

1

您应该删除所有这些行new FormMenu().Show();并使用您启用选项的实例。 IE:a.Show()

if (txtPassword.Text == "10") 
{ 
    FormMenu a = new FormMenu(); 
    this.Hide(); 

    a.EmployeManagement.Enabled = true; 
    a.Sabtenam.Enabled = true; 
    a.Shora.Enabled = true; 
    a.HozorGhiab.Enabled = true; 
    a.Ketabkhane.Enabled = true; 
    a.Show(); 

}

等所有其他条件是否.....

这需要的基本原则OOP一点解释。当您调用new时,将创建在新调用中调用的类的新实例。此实例将其所有属性设置为默认值。 (我假设你的菜单与Enabled属性设置为false开始)你开始改变要启用实例的属性(在a实例)。

现在,如果您再次调用new并创建FormMenu的新实例,那么在a实例上完成的所有工作都是无用的,您会看到屏幕上显示的未命名实例。

好好考虑一下这种方式,写作

new FormMenu().Show(); 

等于写

FormMenu b = new FormMenu(); 
b.Show(); 

最后请注意:
当然我认为这个代码仅仅是简单的测试,你的菜单系统。在真实的商业应用程序中使用固定密码是没有意义的。很多事情需要在这里改变,以获得更专业的东西。首先,您需要一个数据库来存储他们在应用程序中播放的用户名,密码和角色。然后,您需要为您的程序提供一种读取/写入数据库登录信息的方法,并且不要忘记将所有密码以散列形式存储,而不是以明文形式存储。 (你不想离开你的密码,任何人都简单易读的可以看看,你必须将它们存储在表中)

+0

我这样做,a.show而不是最后的代码,但不能启用用户号码10的选项呢,我现在应该做什么? – Eli

+0

是的,它很简单!即时通讯不是一个专业程序员,我只是学生。我有SQL表的用户名和密码。 – Eli

+0

@Eli如果您想了解如何使用数据库表完成这项工作,您可以轻松找到数千个示例。 – Steve

1

我会建议你做与员工详细信息,并具有约细节另一个表中的SQL数据库表密码,限制和员工参考号码到第一个表格。

然后在代码中你可以采取用户输入,并与数据库值检查这些值。