我正在尝试以声明方式使用基于角色的授权,当未经授权的用户尝试访问页面时,它永远不会触发异常或向用户显示错误消息。我应该怎么做才能显示未经授权的消息?这可能以声明的方式吗?
使用编码不是一个很好的选择感觉我有几个角色,并且文件夹被授权给几个角色,而其他文件夹被授权给一个角色。
谢谢
我正在尝试以声明方式使用基于角色的授权,当未经授权的用户尝试访问页面时,它永远不会触发异常或向用户显示错误消息。我应该怎么做才能显示未经授权的消息?这可能以声明的方式吗?
使用编码不是一个很好的选择感觉我有几个角色,并且文件夹被授权给几个角色,而其他文件夹被授权给一个角色。
谢谢
在您的登录页面中使用以下代码将用户重定向到未经授权的页面或默认页面。
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
如果授权失败,则会抛出异常。应该是通过了。你用什么进行身份验证?您是否禁用了匿名访问?
也可以使用 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 页面,请说“您无权查看此页面”。