我有一个带有表单身份验证的标准ASP.NET网站。
"主持人"某些用户拥有的角色应该允许他们访问" /版主/"夹。但是,如果不在主持人角色的用户尝试访问此文件夹,则会将其重定向到标准登录页面,尽管他们已经登录。
这是在web.config中配置的:
<location path="moderators/" inheritInChildApplications="false">
<system.web>
<authorization>
<allow roles="Moderators" />
<deny users="*" />
</authorization>
</system.web>
</location>
如何强制他们使用不同的页面来解释他们不在角色而不是登录页面?
我在这个问题上有多个角色,所以我需要将它们引导到不同的URL,具体取决于它们缺少的角色。
答案 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");
}
}