Поставщик фильтра .Net MVC не соблюдает условие - PullRequest
0 голосов
/ 20 сентября 2011

Мой фильтр Поставщик:

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().

Что происходит?

...