0

ASP.net 2.0 Web アプリケーションで C# 2005 を使用してログイン検証を実装しようとしています。SQL Server データベースには、LoginId、Password、および Role 列を持つ「UserList」という名前のテーブルが含まれています。ログイン Web フォームは、LoginId とパスワードを認証する必要があり、そのユーザー/訪問者に割り当てられた役割に応じて、事前定義されたメニュー オプションを使用して特定の Web フォームにリダイレクトする必要があります。役割は、管理者、DEO、アカウント、またはメンバーです。どのように実装すればよいですか?私は次のことを試しました:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        try
        {
            string uname = Login1.UserName.Trim(); 
            string password = Login1.Password.Trim(); 

            int flag = AuthenticateUser(uname, password);

            if (flag == 1)
            {
                e.Authenticated = true;
                Login1.DestinationPageUrl = "~/MenuAdmin.aspx";
            }
            else if (flag == 2)
            {
                e.Authenticated = true;
                Login1.DestinationPageUrl = "~/MenuDEO.aspx";
            }
            else if (flag == 3)
            {
                e.Authenticated = true;
                Login1.DestinationPageUrl = "~/MenuAccts.aspx";
            }
            else if (flag == 4)
            {
                e.Authenticated = true;
                Login1.DestinationPageUrl = "~/MenuMember.aspx";
            }
            else
            {
                e.Authenticated = false;
            }
        }

        catch (Exception)
        {
            e.Authenticated = false;
        }
    }

private int AuthenticateUser(string uname, string password)
    {
        int bflag = 0;
        string connString = ConfigurationManager.ConnectionStrings["LoginDemoConnString"].ConnectionString;
        string strSQL = "Select * FROM UserList where ULoginId ='" + uname + "' AND UPassword ='" + password + "'";

        DataTable dt = new DataTable();
        SqlConnection m_conn;
        SqlDataAdapter m_dataAdapter;

        try
        {
            m_conn = new SqlConnection(connString);
            m_conn.Open();
            m_dataAdapter = new SqlDataAdapter(strSQL, m_conn);
            m_dataAdapter.Fill(dt);
            m_conn.Close();
        }

        catch (Exception ex)
        {
            dt = null;
        }

        finally
        {
            //m_conn.Close();
        }

        if (dt.Rows.Count > 0)
        {
            if (dt.Rows[0][3].ToString() == "Administrator")
                bflag = 1;
            else if (dt.Rows[0][3].ToString() == "DEO")
                bflag = 2;
            else if (dt.Rows[0][3].ToString() == "Accts")
                bflag = 3;
            else
                bflag = 4;
        }
        return bflag;
    }
4

1 に答える 1

0

まず第一に、SQLテーブルの各ロールにはIDがあると思いますので、AuthenticateUserのifを取り除き、IDを返すだけです。または、実際のロールを返し、Login1_Authenticate 関数でこのデータを使用して何かを行うこともできます。キーがロールで値が pageURL である辞書を使用する場合は、Login1_Authenticate 関数の ifs を取り除くこともできるので、次のように記述できます。

   int flag = AuthenticateUser();
    Login1.DestinationPageUrl = roles.ElementAt(flag).Value;
于 2012-09-06T09:49:13.103 に答える