2

我试图仅使用 .Net MVC 4 否认一个领域,但我没有得到结果。当我<authentication mode="Forms" />输入 web.config 时会发生什么都被拒绝:所有网站都不是我想要的,我只想拒绝管理区域。

我把我AuthorizeAttributeBaseController管理区域,仍然没有工作:

   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");
            }
        }
    }

全球.asax:filters.Add(new AutenticarAdminAttribute());

如果我<authentication mode="Forms" />从 web.config 中删除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();
        }
    }
4

2 回答 2

0

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

授权和身份验证是两件不同的事情!

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

希望有帮助。

于 2012-08-24T14:10:47.120 回答
0

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

于 2012-08-24T17:50:19.700 回答