我有以下情况:我制作的程序有三种类型的用户帐户:超级用户,管理员和顾问。
登录表单效果很好,通过一种方法我可以获得用户的类型并打开所述用户的相应主要表单。
问题在于:用户共享一些表单。但是,我不知道如何让应用程序知道必须根据用户返回三种主要形式中的哪一种。
问题是:有一种方法可以保存登录表单中的值(用户类型)并在其他表单上使用它吗?
以下是我在数据库中获取type值的方法:
public string sacartipo()
{string tipo = "";
username = usuario.Text;
obj.Usuario = usuario.Text;
password = contra.Text;
obj.Contrasena = contra.Text;
tipo = obj.Logeo(username, password);
return tipo; //This is the variable that stores the type of user.
}
答案 0 :(得分:1)
让每个表单的构造函数接受用户类型,这样无论何时显示新表单,都要告诉它哪个用户将使用它。
答案 1 :(得分:1)
您可以将用户类型(在用户登录后)存储在Session["role"]=value
等会话变量中,并在任意位置使用。
答案 2 :(得分:0)
您可以将用户存储在枚举
中public enum Users { Superuser, Administrator, Consultant }
并且在您的应用程序中有一个Users
类型的静态对象,随处可见(全局)
public Users User;
Login
上的将适当的值分配给User
静态对象,例如。
MyApplication.User = Users.Consultant;
并在每个表单中检查用户对Load的权限,例如
var adminPageAllowedUsers = new[] {Users.SuperUser, Users.Administrator};
if(admingPageAllowedUsers.Contains(MyApplication.User))
{
//do the rest
}
else
{
//redirect user to another form
}
这是我想给你的逻辑,代码没有经过测试,所以请原谅我可能出现的错误。
答案 3 :(得分:0)
假设sacartipo()是Form1的一个方法,你想把它称为get的返回值,你在Form2中添加以下方法:
string GetTipo() {
var currentContext=SynchronizationContext.Current;
var tipoLocal=default(string);
SendOrPostCallback d=
dummy => {
using(var x=new Form1())
tipoLocal=x.sacartipo();
};
if(null!=currentContext)
currentContext.Send(d, null);
else
d(null);
return tipoLocal;
}
在Form2的代码中,您调用GetTipo()以及您希望完成的操作。