2010-08-06 204 views
1

我试图以声明方式使用基于角色的授权,当未经授权的用户尝试访问页面时,它从不触发异常或向用户显示错误消息。我应该怎么做才能显示未经授权的消息?这是可能的声明方式?基于角色的授权

使用编码不是一个很好的选择意义我有几个角色,文件夹授权几个角色,而其他文件夹授权一个角色。

谢谢

+0

你可以使用你的配置吗?它做什么而不是显示错误? – Greg 2010-09-01 20:16:36

+0

你的问题没有明确定义。有明确定义的机制来执行声明性访问控制,但在标准的asp.net中,它们都不会导致503.最可能希望的是非描述性重定向到登录页面。这在许多情况下可能会有问题并且不令人满意。请更清楚地定义你正在尝试做什么以及你迄今采取了哪些措施来实现这一目标。 – 2010-09-04 02:45:54

回答

3

在您的登录页面中使用以下代码将用户重定向到未经授权的页面或默认页面。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(Page.IsPostBack) 
      return; 

     if(!Request.IsAuthenticated) 
      return; 

     if(!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) && !UrlAuthorizationModule.CheckUrlAccessForPrincipal(Request.QueryString["ReturnUrl"], User,"GET")) 
     { 
      // In Forms Authentication, authenticated but unauthorized requests are converted into a Redirect to the Login page. 
      // Redirect these to an error page instead. 
      Response.Redirect("~/UnauthorizedAccess.aspx", false); 
     } 
     else 
     { 
      Response.Redirect(FormsAuthentication.DefaultUrl, false); 
     } 
    } 

请参阅此链接发生了什么,并更多信息的图片:

http://www.asp.net/security/tutorials/user-based-authorization-cs

+0

不当使用版权材料。 – 2010-09-04 02:41:41

+0

@Sky Sanders:我想,我已经删除了你指的材料。如果没有,请提供更多详情。 – Greg 2010-11-30 17:15:43

0

如果授权失败,它会抛出异常。它必须通过。你使用什么进行身份验证?你禁用了匿名访问吗?

+0

您是否确定,因为当我使用假角色时,我被重定向到登录页面!!什么是机会?匿名访问被禁用。 – Costa 2010-08-07 15:53:08

+0

我没有意识到你有一个身份验证失败的重定向设置。你使用什么类型的认证? – Ryan 2010-08-09 16:30:24

+0

asp.net表单身份验证 – Costa 2010-08-23 06:10:12

0

也许你可以使用网站地图。更多关于那些here,再加上一点关于绑定安全性的问题here

0

它也可以使用web.config中设置各种文件夹或文件的权限。每个文件夹都可以有一个列表允许或丹尼斯像这样:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <authorization> 
     <allow roles="Administrators" /> 
     <allow roles="Random Role" /> 
     <deny users="*" /> 
     <deny users="?" /> 
    </authorization> 
    </system.web> 
</configuration> 

然后当有人打,要求他们无权它会重定向到登录页面授权页面。然后,您可以检查它们来自的页面的查询字符串,并可能设置特定于案例的响应,或者至少在它上面有returnURL页面时说“您无权查看此页面”。