1

我有以下场景:我制作的一个程序有三种类型的用户帐户:超级用户、管理员和顾问。

登录表单运行良好,通过一种方法,我可以获取用户的类型并打开所述用户的相应主表单。

问题是这样的:用户共享一些表单。但是,我不知道如何让应用程序知道它必须根据用户返回三种主要形式中的哪一种。

问题是:有一种方法可以保留登录表单中的值(用户类型)并在其他表单上使用它?

这是我在数据库中获取类型值的方法:

  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. 

    }
4

4 回答 4

1

让每个表单的构造函数都接受用户类型,这样每当您显示一个新表单时,您就可以告诉它哪个用户将使用它。

于 2012-12-29T16:09:25.513 回答
1

您可以将用户类型(在用户登录后)存储在会话变量中Session["role"]=value,并在您想要的任何地方使用它。

于 2012-12-29T16:23:39.053 回答
0

假设 sacartipo() 是 Form1 的一个方法,你想调用它来获取返回值,你在 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() 并且您期望做的事情已经完成。

于 2012-12-29T19:29:37.153 回答
0

您可以将用户存储在枚举中

public enum Users { Superuser, Administrator, Consultant }

Users并在您的应用程序中拥有一个随处可见的静态类型对象(全局)

public Users User;

为静态对象Login分配适当的值User,例如。

MyApplication.User = Users.Consultant;

并在每种形式中检查用户对加载的权限,例如。

var adminPageAllowedUsers = new[] {Users.SuperUser, Users.Administrator};
if(admingPageAllowedUsers.Contains(MyApplication.User))
{
    //do the rest
}
else
{
    //redirect user to another form
}

这是我想给你的逻辑,并且代码没有经过测试,所以请原谅可能的错误。

于 2012-12-29T16:24:09.937 回答