禁用命令按钮,但用户角色除外

神是

会员
已加入
2019年7月31日
留言内容
11
编程经验
Beginner
嗨,论坛同事们,

当我在平台上发布问题时,非常感谢您的及时帮助。

在开发薪资数据库时,我已经进入建立用户访问控制的阶段。我已经成功创建了用户登录控件,在该控件中,当用户角色使用相应的用户名和密码登录相应角色时,会将用户定向到仪表板,在该仪表板上可以访问指向其相应特权的所有相应链接。

现在,我当前的问题是,除了Admin之外,每当有任何用户登录时,仪表盘上的所有其他命令按钮都应被禁用,但已登录用户角色的命令按钮除外。仪表板上的其他角色是会计,人力资源和只读。

我想附加文本代码,以便有人可以帮我修改我的工作。

谢谢你的协助

C#:
        私人void loginButton_Click(对象发送者,EventArgs e)

        {
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString);
            SqlCommand command = new SqlCommand();
            con.Open();

            string userText = userTextBox.Text;
            string passText = pwdTextBox.Text;

            SqlCommand cmd = new SqlCommand("从UsersLogin选择角色,其中UserName ='"+ userTextBox.Text +"'and Password='"+ pwdTextBox.Text +"'", con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                MessageBox.Show("Welcome to the Dashboard");
                this.Hide();
                Dashboard dashboard = new Dashboard();
                dashboard.Show();

                cmd = new SqlCommand("SELECT Role from UsersLogin where [email protected]", con);
                cmd.Parameters.AddWithValue("[USER=7968]@username[/USER]", userText);
                string 角色 = cmd.ExecuteScalar().ToString();
                MessageBox.Show("Welcome " + 角色);
                con.Close();
            }    
            else
            {
                MessageBox.Show("Access Denied!!");
                Application.Exit();
            }
            con.Close();
        }
 
由主持人最后编辑:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
在您学习遵循简单的说明之前,所有主题都应该关闭。在将您的代码发布到代码标签之前,已经多次询问您。您的帖子只会为版主创建不必要的工作。问 这里 , 这里 ,现在您又做了一次。我个人拒绝从任何不使用代码标签格式化代码的人那里读取代码,因此您只是在延迟自己的支持。

荣誉
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
大声笑!我同意。该代码应在代码标签中。但是,由于现在不阅读它,您会错失OP知道如何使用参数化SQL查询来确定用户角色的讽刺意味,但是他没有将相同的知识用于检查用户名和密码。此外,他没有加密用户密码!进行SQL注入攻击的时机已经成熟...
 
Last edited:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
This will be the last time I format your code for you. If it's too much trouble for you to format for code snippets for us, why would you expect us to volunteer our time to help? Also, don't post irrelevant code. We don;t need all those namespace imports, we don;t need a constructor with no extra code in it, we don;t need an empty event handler and we don't need an event handler with nothing but a Close call in it. Don't make us waste our time reading irrelevant code that is already hard to read because you haven't bothered formatting it. As you may be detecting, no one is overly keen to make an effort for you when you make no effort for us.
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
我会关闭它的约翰。如果我们的操作员不遵循简单的说明,您为什么还要打扰?指示,要求他们遵循三遍以上。...OP显示完全无视。
 

神是

会员
已加入
2019年7月31日
留言内容
11
编程经验
Beginner
你好 金西尼和Sheepings,

感谢您的严厉谴责。我希望如果我知道该怎么做,不要再犯错了。我尝试了几次,但不知道如何找到代码标签,以及如何按预期进行操作。在论坛上看到了一个非常新的话题。

我希望有人能引导我完成整个过程,以便我做正确的事。我还了解到,下次我也应该只发布遇到问题的代码部分。

谢谢。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
您已将粗体格式应用于最新的帖子,显然您知道如何在文本编辑器中设置文本格式,即使用工具栏。您是否不是要浏览工具栏以查看其他可用的工具?很显然,格式化代码的工具应该在某处。此外,您可以编辑或引用我已经为您修复的任何帖子,以查看它们在标记中的外观,然后自己添加适当的标签。您可能是这个论坛的新手,但其工作方式与应用程序或网络上的许多其他编辑工具完全相同。
 

神是

会员
已加入
2019年7月31日
留言内容
11
编程经验
Beginner
感谢您的包容和帮助。我相信该错误不会再发生。

但是我的问题还没有解决。当前,当任何用户使用正确的密码登录时,所有用户都被定向到“仪表板”页面,该页面上有四个角色用户命令按钮(“管理员”,“会计”,“ HR”和“只读”)。我的期望是,除了Admin之外,当其他任何用户登录时,所有其他命令按钮都应被禁用,但已登录用户的按钮除外。任何人都可以在代码中帮助我吗?

私人void loginButton_Click(对象发送者,EventArgs e)

执行任务?

我将非常感谢。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
在您整理代码参数的情况下,我将为您提供帮助。第11行不使用任何参数,而第22行则不使用任何参数。首先修复该问题。始终通过使用参数避免SQL注入。对于任何数据库驱动的网站/项目,参数应该是优先级。

至于要确定用户角色的检查,仅是使用条件逻辑(我的签名中的链接)的问题,尽管我可能更喜欢实现switch语句,并且基于用户的角色,您可以允许给定应为给定的一组用户启用的控件权限集,具体取决于它们所属的角色。这样可以解决不同角色用户的权限问题。希望这是有道理的,因为我今天真的很精疲力尽,而且我的专注力一直很低。但是,明天恢复精力时,我会和您一起检查一下,看看您是否取得了进步,并且也做出了我建议的更改,也许我 威力 给您一些帮助代码,以使您朝着想要的方向前进(如果您仍然遇到困难)。
 
Last edited:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
As suggested by 羊皮, the obvious option should be to simply write an if statement for each Button and set the Enabled property based on whether the Text property matches the current 角色. Conditional logic like that is one of the absolute fundamentals of programming in any language so if you can't spot when an if statement can/should be used then you have not spent enough time learning the basics to be writing any code at all. I suggest that you stop what you're doing and follow the tutorial link in my signature below, in order to get a grounding in the basics first.

Of course, there are more advanced options than simple if statements, including the switch mentioned earlier. Here's how I 威力 perform the task currently at hand:
C#:
var buttons = new[] {button1, button2, button3, button4};

Array.ForEach(buttons, b => b.Enabled = (b.Text == 角色));
 
Last edited:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
@jmcilhinney 如果您查看查询:
SqlCommand("从UsersLogin选择角色,其中UserName ='"+ userTextBox.Text +"'and Password='"+ pwdTextBox.Text +"'", con);
如果用户正在 角色 (我认为是用户的 "rank"),您可以按照自己的意愿进行操作;使用基于 "ranks",并且如果用户包含以下内容之一 等级,您可以迭代仪表板的所有控件(假设仪表板是控制这些控件的对象),并禁用表示用户排名的控件也不应具有访问权限。)
 

神是

会员
已加入
2019年7月31日
留言内容
11
编程经验
Beginner
是!我同意你的看法 金西尼。
我认为我必须暂停学习您建议的基础课程,然后再参加我的项目。

感谢您的意见。
 
最佳 底部