ASP.NET:如果登录后,如何将不在角色中的用户重定向到特定页面?

时间:2014-03-27 10:20:08

标签: asp.net forms-authentication roles

我有一个带有表单身份验证的标准ASP.NET网站。

"主持人"某些用户拥有的角色应该允许他们访问" /版主/"夹。但是,如果不在主持人角色的用户尝试访问此文件夹,则会将其重定向到标准登录页面,尽管他们已经登录。

这是在web.config中配置的:

    <location path="moderators/" inheritInChildApplications="false">
      <system.web>
      <authorization>
          <allow roles="Moderators" />
          <deny users="*" />
       </authorization>
      </system.web>
    </location>

如何强制他们使用不同的页面来解释他们不在角色而不是登录页面?

我在这个问题上有多个角色,所以我需要将它们引导到不同的URL,具体取决于它们缺少的角色。

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是从ReturnUrl查询字符串变量中解析所请求的路径。

例如,假设他们被重定向到:

/login.aspx?ReturnUrl=%2fModerators

...然后在login.aspx的Page_Load中填写:

if (Context.User.Identity.IsAuthenticated)
{
    string returnUrl = Request.QueryString["ReturnUrl"];
    if (!string.IsNullOrEmpty(returnUrl) 
            && returnUrl.StartsWith("/moderators")
            && !Context.User.IsInRole("moderators")))
    {
        Response.Redirect("~/not-in-role.aspx?role=Moderators");
    }
}