【问题标题】:Visual C# - Redirect Users to Different windows forms according to their User RoleVisual C# - 根据用户角色将用户重定向到不同的窗体
【发布时间】:2015-02-15 11:28:30
【问题描述】:

我想创建一个登录表单,根据用户的角色将用户登录重定向到两个不同的表单。我有两种形式 1. UserPanelFrm 和 2.FrmUserRole 和两个用户角色。 1.管理员和2.用户。我想将 Admin 重定向到 UserPanelFrm 和 User 以形成 FrmUserRole。我研究了这个过程,但只能找到对 ASP.NET 有用的资源。

tbl_Staff:

CREATE TABLE [dbo].[tbl_Staff](
[StaffID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[Address] [nvarchar](500) NULL,
[Phone] [nvarchar](100) NULL,
[Email] [nvarchar](100) NULL,
[JoinedDate] [date] NULL,
[Username] [nvarchar](50) NULL,
[Password] [nvarchar](max) NULL,
[CreatedDate] [date] NULL,
[Roles] [nvarchar](200) NULL,
[Status] [int] NULL
}

tbl_StaffRoles:

CREATE TABLE [dbo].[tbl_StaffRoles](
[id] [int] NULL,
[RoleDescription] [nvarchar](50) NULL
)

tbl_StaffRoles 数据:

id RoleDescription
1 Admin
2 User

您好,我目前正在使用以下代码进行正常登录。

登录表单 btnLogin :

private void btnLogin_Click(object sender, EventArgs e)
{
    try
    {
        int result = uc.Login(txtUserName.Text, txtPassword.Text);
        if (result == 1)
        {
            this.Hide();
            UserPanelFrm frm = new UserPanelFrm();
            frm.ShowDialog();
            this.Close();
        }
        else
        {
            MessageBox.Show("INVALID USERNAME OR PASSWORD");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

UserClass.cs 登录类:

public int Login(String Username, String Password)
{
    try
    {
        int result = 0;
        SqlCommand cmd = new SqlCommand("Select * from tbl_Staff where Username=@Username and Password=@Password", conn);
        cmd.Parameters.AddWithValue("@Username", Username);
        cmd.Parameters.AddWithValue("@Password", Password);
        conn.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(dr);
        conn.Close();
        if (dt.Rows.Count > 0)
            result = 1;
        else
            result = 0;

        return result;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

请帮助修改代码,以便我可以根据用户的角色将用户重定向到 Windows 窗体。

【问题讨论】:

    标签: c# login user-roles


    【解决方案1】:

    修改 Login 方法以返回数据表(假设您在该查询中有一个角色的列):

    private void btnLogin_Click(object sender, EventArgs e)
    {
        try
        {
            DataTable result = uc.Login(txtUserName.Text, txtPassword.Text);
            if (result.Rows.Count == 1)
            {
                this.Hide();
    
                string role = result.Rows[0]["Role"].ToString();
    
    
                switch (role)
                {
                    case "User": 
                        UserPanelFrm frm = new UserPanelFrm();
                        frm.ShowDialog();
                        this.Close();
                        break;
                    case "Admin":
                        //Show a different form
                        FrmUserRole fur = new FrmUserRole();
                        fur.ShowDialog();
                        this.Close();
                        break;
                }
            }
            else
            {
            MessageBox.Show("INVALID USERNAME OR PASSWORD");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    

    还有……

    public DataTable Login(String Username, String Password)
    {
        try
        {
            SqlCommand cmd = new SqlCommand("Select * from tbl_Staff where Username=@Username and Password=@Password", conn);
            cmd.Parameters.AddWithValue("@Username", Username);
            cmd.Parameters.AddWithValue("@Password", Password);
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            DataTable dt = new DataTable();
            dt.Load(dr);
            conn.Close();
            return dt;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    

    【讨论】:

    • 非常感谢您的建议。有效。现在我在使用具有“管理员”角色的用户登录时获得 UserPanelfrm,并在使用“用户”角色登录时获得 FrmUserPanel。
    【解决方案2】:

    您应该检查 tbl_Staff 中的“角色”:

     public int Login(String Username, String Password)
            {
                try
                {
                    SqlCommand cmd = new SqlCommand("Select * from tbl_Staff where Username=@Username and Password=@Password", conn);
                    cmd.Parameters.AddWithValue("@Username", Username);
                    cmd.Parameters.AddWithValue("@Password", Password);
                    conn.Open();
                    SqlDataReader dr = cmd.ExecuteReader();
                    DataTable dt = new DataTable();
                    dt.Load(dr);
                    conn.Close();
                    if (dt.Rows.Count > 0)
                    {
                        string role = dt.Rows[0]["Roles"].ToString();
    
                        if (role.Equals("User"))
                        {
                            UserPanelFrm frm = new UserPanelFrm();
                            frm.ShowDialog();
                            this.Close();
                            return 1;
                        }
                        else if (role.Equals("Admin"))
                        {
                            FrmUserRole fur = new FrmUserRole();
                            fur.ShowDialog();
                            this.Close();
                            return 1;
                        }
                    }
    
                    return 0;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            private void btnLogin_Click(object sender, EventArgs e)
            {
                try
                {
                    int result = uc.Login(txtUserName.Text, txtPassword.Text);
                    if (result == 0)
                    {
                        MessageBox.Show("INVALID USERNAME OR PASSWORD");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    

    【讨论】:

    • 感谢您的建议。它有助于理解逻辑。
    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 2020-07-05
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多