2009-12-01 63 views
0

我设计了多个客户端/服务器应用程序。我正在开发一个涉及用户登录以访问应用程序的项目。我正在研究一种登录到应用程序时存储用户权限的最有效和“简单”的方法,该应用程序可以在整个主窗体上限制对某些选项卡的访问。
我创建了一个名为“用户”静态类具体如下:存储/访问用户访问角色C#Winforms

static class User 
{ 
    public static int _userID; 
    public static string _moduleName; 
    public static string _userName; 

    public static object[] UserData(object[] _dataRow) 
    { 
     _userID = (int)_dataRow[0]; 
     _userName = (string)_dataRow[1]; 
     _moduleName = (string)_dataRow[2]; 

     return _moduleName; 
    } 



} 

当他们已经通过验证的用户登录,我希望存储在内存中的_moduleName对象,以便我可以控制在哪个标签例如,他们可以访问的主窗体选项卡控件;如果用户已在数据库中分配了以下角色:“销售分类账”,“采购分类账”,那么只有当登录表单被隐藏时,他们才能通过使用Switch-Case块来查看表单上的相关选项卡,主窗体被实例化。我可以存储用户ID和用户名变量中的主要形式,一旦它加载由例如说的手段:

在这里,我们处理来自用户的登录数据:

DataAccess _dal = new DataAccess(); 
     switch (_dal.ValidateLogin(txtUserName.Text, txtPassword.Text)) 
     { 
      case DataAccess.ValidationCode.ConnectionFailed: 
       MessageBox.Show("Database Server Connection Failed!"); 
       break; 

      case DataAccess.ValidationCode .LoginFailed: 
       MessageBox.Show("Login Failed!"); 
       _dal.RecordLogin(out errMsg, txtUserName.Text, workstationID, false); 
       break; 

      case DataAccess.ValidationCode .LoginSucceeded: 
       frmMain frmMain = new frmMain(); 
       _dal.GetUserPrivList(out errMsg,2); //< here I access my DB and get the user permissions based on the current login. 

       frmMain.Show(); 
       this.Hide(); 
       break; 

      default: 
       break; 
     } 

    private void frmMain_Load(object sender, EventArgs e) 
    { 
     int UserID = User._userID; 
    } 

这工作正常,但是_modules对象包含多个权限/角色,具体取决于数据库中设置的内容,如何存储多个值并通过Switch-Case块访问它们?

回答

0

如果我的理解正确,您希望能够将权限/角色存储为数据库中每个用户的值。

我相信你可以写一个整数到数据库字段,如:RolesID。向你的数据库字段写入标志的值。喜欢的东西:

[Flag] 
public enum ROLES 
{ 
    Administrator = 1, 
    User = 2, 
    OtherRole3 = 4, 
    OtherRole4 = 8 
} 

你应该能够读取该值,并分配给声明为一个字段:

ROLES userRoles = GetRoleValueFromDB(); 

我敢肯定我这样做过。

HTH ...