1

我有我网站的管理区域:http ://www.mysite.com/webadmin并且我想通过角色来保护它(我正在使用 ASP.NET 表单身份验证),因此只有具有“管理员”角色的用户可以访问它。在 web.config 我添加了这个条目:

<location path="WebAdmin">
    <system.web>
        <authorization>
            <deny users="*"/>
            <allow roles="admin"/>
        </authorization>
    </system.web>
</location>

它“有点”有效 - 如果您不是“管理员”角色,它会将您重定向到登录页面。但我不希望这样,我想显示一个错误页面。有什么办法可以控制这种行为?

谢谢你,安德烈

4

1 回答 1

1

您可以通过 web.config 更改您的文件认为是登录页面的 URL。(参见http://www.15seconds.com/issue/020220.htm。)

考虑将您的自定义错误页面 url 替换为配置中的真实登录 URL。

编辑:

如果在整个虚拟目录中将此作为通用解决方案实施,则 web.config 方法是可行的。(尝试<location>在 web.config 中的元素下配置自定义 loginUrl 将导致配置错误。)

您可以通过在管理页面(或管理页面的基类)中注入诸如此类的代码来强制地对此行为进行更细粒度的控制:

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);

    if (!User.IsInRole("admin"))
    {
        Response.Redirect("~/ErrorPage.aspx?reason=denied");
    }
}

您还可以考虑创建一个HttpModule,或利用您的 Global.asax,以更通用的方式处理授权,而不依赖于页面继承。请参阅http://msdn.microsoft.com/en-us/library/ms227673.aspx。使用该BeginRequest事件检查 URL 路径,如果它与您的模式匹配,则传递您想要传递的错误或重定向。

于 2010-08-25T18:25:01.620 回答