Мой фильтр Поставщик:
public class ValidatePermissionFilterProvider : IFilterProvider
{
private readonly IList<ControllerAction> _actions = new List<ControllerAction>();
public void Add(string controllerName, string actionName)
{
_actions.Add(new ControllerAction() { ControllerName = controllerName, ActionName = actionName });
}
public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
bool needAuthorization = true;
foreach (ControllerAction action in _actions)
{
if ((action.ControllerName == actionDescriptor.ControllerDescriptor.ControllerName || action.ControllerName == "*")
&& (action.ActionName == actionDescriptor.ActionName || action.ActionName == "*"))
{
needAuthorization = false;
}
}
if (needAuthorization)
yield return new Filter(new ValidatePermissionAttribute(), FilterScope.First, null);
yield break;
}
}
internal class ControllerAction
{
internal string ControllerName { get; set; }
internal string ActionName { get; set; }
}
Мой фильтр:
public class ValidatePermissionAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return false;
}
}
Мой Global.asax:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
ValidatePermissionFilterProvider validatePermissionProvider = new ValidatePermissionFilterProvider();
validatePermissionProvider.Add("Login", "Index");
validatePermissionProvider.Add("Erro", "*");
FilterProviders.Providers.Add(validatePermissionProvider);
}
Мой фильтр не соответствует условию, когдаЯ пытаюсь использовать контроллер Erro
в любом действии в URL, которое он передает фильтру.
Мое условие: передать все контроллеры / действия, кроме тех, которые я сообщил в методе Add()
.
Что происходит?