基于角色的授权

时间:2010-08-06 14:02:33

标签: asp.net asp.net-membership authorization role-based

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

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

感谢

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

也许您可以使用站点地图。有关here的更多信息,还有一些关于将安全性与here联系起来的问题。

答案 3 :(得分: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页面,请说“您无权查看此页面。”