在表单身份验证中提到Accessdenied页面的位置

时间:2009-12-10 12:03:59

标签: asp.net forms-authentication

我已实施表单身份验证

 <location path="Admin">
 <system.web>
  <authorization>
    <deny users="?"/>
    <allow roles="Admin" />
    <deny roles="systemAdmin"/>
  </authorization>
  </system.web>
 </location>

由于在上述权限中,管理员可以访问Admin文件夹,而systemAdmin不能拥有。

我制作了自定义的Accessdenied页面,我向用户显示的消息是他无权访问此页面

现在的问题是,如果systemAdmin尝试点击Admin文件夹页面,他将被重定向到AccessDenied.apsx页面。 (请注意:两个用户都经过身份验证,1个用户拥有某个文件夹的权限,而其他用户拥有其他文件夹的权限。我不想在每个页面都进行检查)

在哪里指定accessdenied页面重定向?

由于

2 个答案:

答案 0 :(得分:1)

我没有看到在web.config中重定向到AccessDenied页面的选项。

我在公共基页中使用以下代码。

 if (!Page.IsPostBack)      
 {           
     if (Request.IsAuthenticated )
         // This is an unauthorized, authenticated request...                
         Response.Redirect("~/Unauthorized.aspx");      
 } 

<强>更新

我只是玩了一点点

<authentication mode="Forms">
    <forms loginUrl="/login/Login.aspx" />
</authentication>

通过以上设置,如果systemAdmin访问管理页面,他将被重定向到登录页面。在那里你可以放一些逻辑,如果用户已经登录,然后重定向到访问被拒绝的页面。

如果这有助于您,请告诉我。

答案 1 :(得分:1)

遗憾的是,默认访问机制不区分401 Unauthorized和403 Forbidden。

如果您不想实现Saar's solution使用公共基页 - 并且所有管理页面都从基页类继承,则另一种选择是在您的登录页面中编写逻辑 - 检查用户是否已登录(Request.IsAuthenticated)并显示一条消息,指出他们无权查看这些页面。

您可能还应该将Response.StatusCode更改为403,将Response.StatusMessage更改为"Forbidden"