【问题标题】:C# Preventing access to admin page for specific usergroupsC#防止访问特定用户组的管理页面
【发布时间】:2016-04-11 14:37:36
【问题描述】:

所以我创建了一个名为 AdminPanel.aspx 的页面,我试图以只有特定用户组可以访问它的方式来保护它。

SQL 中的我的用户表有一个用户组列,其中普通用户用户组 = 1 和管理员用户组 = 2,这就是用户的分类方式。

我可以设置页面,但我不知道如何保护它免受特定用户组的访问 # 阻止访问它,事实上我如何防止未登录的用户访问它?

一旦用户登录,我就确保创建了一个会话。

我使用 3 层架构如下:

实体层、业务层和数据访问层,

目前我做的登录功能如下:

string mail = Request["EmailAddress"].ToString();
            string password = Request["PassWord"].ToString();
                User newuser = new User(mail, password);


                if (UserBClass.verifyUser(newuser))
                {
                    newuser = UserBClass.login(newuser);

                    Session["User_Session"] = newuser;
                    var my = (User)Session["User_Session"];

                    if (my.Usergroup == "1")
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "redirect member",
                                                        "alert('You Are Now Successfully Logged In!'); location.href='Default.aspx';",
                                                        true);
                    }
                    else if (my.Usergroup == "2")
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "redirect administrator",
                                                         "alert('Welcome Admin!'); location.href='AdminPanel.aspx';",
                                                         true);
                    }

                }
                else {

                   Page.ClientScript.RegisterStartupScript(this.GetType(), "redirect wrong credentials",
                 "alert('Incorrect Username Or Password'); location.href='Login.aspx';",
                 true);

                }
            } 

我使用 if 条件检查用户组以区分用户类型(普通、管理员 .. 等)..

有什么想法吗?

【问题讨论】:

  • 在 MVC 中,您可以使用 Authorize 属性来执行特定控制器操作,在 Web 表单中,您可以尝试搜索此功能的等效项,例如:linklink
  • 如何通过菜单链接访问管理页面?

标签: c# html asp.net visual-studio


【解决方案1】:

创建一个包含表单列表的表 为用户角色创建另一个表

然后在映射或联结表中创建UserRole to Form Mapping。 登录页面后可以使用Repeater控件显示菜单

【讨论】:

    【解决方案2】:

    一旦您对用户进行了身份验证,请确保根据 Usergour viz 正确设置了用户的角​​色。 admin 代表 2 或 normalUser 代表 1。然后在您的 web.config 文件中,使用以下配置来允许您的 AdminPanel.aspx 页面只有管理员用户可以访问。

      <location path="AdminPanel.aspx">
        <system.web>
          <authorization>
            <allow roles="admin"/>
          </authorization>
        </system.web>
      </location>
    

    我使用FormsAuthenticationTicket 和表单身份验证来识别用户。因此,在身份验证后,您可以创建此票证,并在创建票证时分配特定角色。以下链接可能对您有所帮助FormsAuthenticationTicket -

    http://csharpdotnetfreak.blogspot.com/2009/02/formsauthentication-ticket-roles-aspnet.html

    http://www.codeproject.com/Articles/6773/Form-Authentication-Tickets

    【讨论】:

    • 我得到了 web.config 并且我确实验证了用户,但是你如何设置“角色”,因为我区分用户的方式是通过用户组列,其中管理员将属于用户组“2”。
    • @AndrewJones - 更新了我的答案,假设使用 FormsAuthenticationTicket 进行身份验证。如果您是使用不同方法的身份验证会话,请使用相应的代码编辑您的问题。
    • 我已经用代码更新了问题,我正在尝试检索单独页面的用户组,例如 AdminPanel.aspx 以防止其他用户组..访问它...
    • @AndrewJones 感谢您的更新。这不是在 Web 应用程序中使用身份验证的正确方法,理想情况下,您应该在验证用户之后创建身份验证 cookie,并且对于所有后续请求,该 cookie 将用于识别用户。请您点击此链接并稍微改变您的方法 - csharpdotnetfreak.blogspot.com/2009/02/…
    • 感谢链接,它真的很有帮助,但我不明白“角色”是如何工作的,我该如何定义它们?
    【解决方案3】:

    您可以阻止登录用户以不同的方式访问管理页面,从 web.config 或从后面的代码。例如

       if (!Usergroup.equals("2"))
       {
            Response.Redirect("somepage.aspx");
       }
    

    对于未登录的用户,您可以在母版页中检查会话,例如,

     if (Convert.ToString(Session["LoginId"]) == "")
     {
           Response.Redirect("somepage.aspx");
     }
    

    【讨论】:

    • 是的,我就是这样做的,但我无法从该特定用户会话中检索用户组以获取单独的页面。这就是问题所在,我已经更新了我的代码。
    猜你喜欢
    • 2013-09-27
    • 2020-09-01
    • 2021-01-07
    • 2016-09-19
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多