C# 授权核心保持MVC4Web应用程序的循环
我实现了一个自定义属性,它基本上检查用户是否在某个组中。如果是,它将处理未经授权的请求。我遇到的问题是,代码不断循环并找到问题所在。如果我有 我的代码如下:C# 授权核心保持MVC4Web应用程序的循环,c#,asp.net-mvc-4,authorization,C#,Asp.net Mvc 4,Authorization,我实现了一个自定义属性,它基本上检查用户是否在某个组中。如果是,它将处理未经授权的请求。我遇到的问题是,代码不断循环并找到问题所在。如果我有 我的代码如下: protected override bool AuthorizeCore(HttpContextBase httpContext) { if (base.AuthorizeCore(httpContext)) { var context = new PrincipalCont
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (base.AuthorizeCore(httpContext))
{
var context = new PrincipalContext(ContextType.Domain, "DOMAIN");
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, httpContext.User.Identity.Name);
if (userPrincipal != null)
{
PrincipalSearchResult<Principal> groups = userPrincipal.GetGroups();
bool found = groups.Any(item => item.Name == "NAME OF GROUP HERE");
if (found)
{
return false;
}
}
return true;
}
return false;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
{
{"action", "AccessDenied"},
{"controller", "Error"}
});
}
希望有人能帮助我
谢谢错误控制器或AccessDenied操作是否应用了筛选器?如果是这样的话,就会导致循环。在全局级别而不是控制器级别应用过滤器时,情况似乎就是这样。向筛选器添加一个检查,可能是“这是错误控制器或用户检查已通过”。错误控制器和accessdenied没有应用筛选器。我应该将检查应用到过滤器的哪一部分?您将过滤器添加到
全局过滤器集合。。。这使得它对所有控制器和操作都是全局的。为什么您认为这不包括ErrorController
?在您的位置,我将删除全局筛选器,并将该属性添加到应用程序中需要此授权检查的每个控制器。好的,我想阻止某个特定组实际访问应用程序,因此它被添加到global.asax中。我注意到的一件事是,如果我在HandleUnauthorizedRequest方法中添加base.HandleUnauthorizedRequest(filtercontext),它不会循环,但不会重定向filter.result,这是一个奇怪的地方,你永远不能为他们提供拒绝访问页面-它还要求用户通过检查!
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeADAtttribute());
}