asp.net mvc - 限制对网页的访问

时间:2010-03-27 16:50:08

标签: asp.net-mvc

问候, 在我的asp.net mvc应用程序中,我想要做的是只有在用户成功授权后才能访问某些页面。我已经创建了自定义成员资格提供程序,并且工作正常我怎样才能在web配置中创建这样的规则 - 例如~Admin /文件夹中的所有页面?我不想在每个控制器的操作上创建验证代码。 现在我在我的web.config中有以下声明:

    <location path="~/Admin"> 
<system.web>
  <authorization>
    <deny users="?"/> 
  </authorization>
</system.web>

但它不起作用。

1 个答案:

答案 0 :(得分:2)

在配置文件中执行授权逻辑有一个很大的缺点:它不能轻易进行单元测试,而且认证应该进行单元测试非常重要。我建议你写这个问题来编写一个自定义授权过滤器,它可以用来为需要身份验证的所有管理操作装饰一个基本控制器:

[AttributeUsage(
    AttributeTargets.Method | AttributeTargets.Class, 
    Inherited = true
)]
public class RequiresAuthenticationAttribute 
    : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new RedirectResult(
                string.Format("{0}?ReturnUrl={1}", 
                    FormsAuthentication.LoginUrl, 
                    filterContext.HttpContext.Request.Url.AbsoluteUri
                )
            );
        }
    }
}

你的管理员控制器:

[RequiresAuthentication]
public class AdminController : Controller
{
    // .. some actions that require authorized access
}