如何拒绝访问.net MVC中的一个区域?

时间:2012-08-24 13:52:37

标签: .net asp.net-mvc forms-authentication authorize-attribute

我试图仅使用.Net MVC 4拒绝一个区域而我没有得到结果。当我将<authentication mode="Forms" />放入web.config时,一切都被拒绝:所有网站都不是我想要的,我只想拒绝管理区域。

我将AuthorizeAttribute放入我的管理区域的BaseController,仍然无效:

   public class AutenticarAdminAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);

            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                filterContext.Result = new RedirectResult("~/admin/login");
            }
        }
    }

Global.asax:filters.Add(new AutenticarAdminAttribute());

如果我从web.config中删除<authentication mode="Forms" />,则AuthorizeAttribute无法完成工作,IsAuthenticated始终为真。

当我再次将<authentication mode="Forms" />放入web.config时,一切都被拒绝了。

我不能只限制一个区域,怎么办?

管理区域中的BaseController:

[AutenticarAdmin]
public class BaseController : Controller
{
    public BaseController()
    {
    }
}

管理区域中的DefaultAdminController:

public class DefaultController : BaseController
    {
        public ActionResult Index()
        {
            return View();
        }
    }

公共控制人:

public class DefaultController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }

2 个答案:

答案 0 :(得分:0)

您正在重写OnAuthorization方法并在内部检查用户是否为IsAuthenticated。

授权和身份验证是两回事!

关于身份验证,您可以在.config文件中设置默认重定向URL和登录URL(在身份验证标记中)。

希望有所帮助。

答案 1 :(得分:0)

从global.asax中删除filters.Add(new AutenticarAdminAttribute());。注册全局过滤器与将属性放在应用程序的所有控制器中相同。