我设计了几个客户端/服务器应用程序。我正在开发一个涉及用户登录以访问应用程序的项目。我正在查看登录到应用程序后存储用户权限的最有效和“简单”方法,该方法可用于限制对主表单上某些选项卡的访问。
我创建了一个名为“User”的静态类,详细信息如下:
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块查看表单上的相关选项卡。主表单被实例化。我可以通过例如:
加载后将userID和userName变量存储在主窗体中这里我们处理来自用户的登录数据:
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 :(得分:0)
如果我理解正确,您希望能够将权限/角色作为值存储在每个用户的数据库中。
我相信你可以写一个整数到数据库字段,如:RolesID
。写入数据库字段的标志值。类似的东西:
[Flag]
public enum ROLES
{
Administrator = 1,
User = 2,
OtherRole3 = 4,
OtherRole4 = 8
}
您应该能够读取该值并分配给声明为:
的字段ROLES userRoles = GetRoleValueFromDB();
我很确定我以前做过这个。
... HTH