1

次のシナリオがあります。作成したプログラムには、スーパーユーザー、管理者、コンサルタントの3種類のユーザーアカウントがあります。

ログインフォームはうまく機能し、メソッドを介してユーザーのタイプを取得し、そのユーザーのそれぞれのメインフォームを開くことができます。

問題はこれです:ユーザーが共有するいくつかのフォームがあります。しかし、ユーザーに応じて、3つの主要なフォームのどれを返す必要があるかをアプリケーションに認識させる方法がわかりません。

質問は:ログインフォームから値(ユーザータイプ)を保持し、他のフォームでそれを使用する方法はありますか?

データベースで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. 

    }
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 に答える