ASP.NET Core MVC ActionFilter выполняется перед AuthorizationFilter - PullRequest
0 голосов
/ 20 февраля 2019

На моем сайте есть несколько controller, которые разрешены только авторизованным пользователям.Кроме того, есть некоторые из тех контроллеров, которые требуют аутентификации, которые также должны быть ограничены в зависимости от времени года.

Чтобы справиться с этим, я создал TimeRangeFilter ActionFilter / ResourceFilter.

Вот как это выглядит:

public class TimeRangeFilter : Attribute, IActionFilter, IOrderedFilter
{
  public string AllowedMonths { get; set; } // like |3|4|5|
  public string RedirectUrl { get; set; }
  ...... // OnActionExecuting....
}

Затем на моих Controller class я реализую так:

[TimeRangeFilter(AllowedMonths = "|3|4|", RedirectUrl = "/feature/welcome", Order = 1)]
[Authorize]
[IsNotNefarious]
public class HubController : BaseController
{...}

Нодаже с IOrderedFilter interface на filter сначала выполняется AuthorizationFilter, ТО мой TimeRangeFilter.

Для этой страницы приветствия я не хочу требовать от пользователяВойдите, чтобы увидеть это.Но я не хочу менять URL-адрес, который попадает на мою страницу Hub, исходя из разрешенных месяцев.

Как назначить приоритеты для моего ActionFilter / ResourceFilter для выполнения и короткого замыкания,до AuthorizationFilter казни?

1 Ответ

0 голосов
/ 20 февраля 2019

Короткий ответ: «Вы не можете заставить ActionFilter выполнить до AuhtorizeFilter».Но вы можете превратить TimeRangeFilter в фильтр авторизации

public class TimeRangeFilterAttribute : Attribute, IAuthorizationFilter, IOrderedFilter
{
    public string AllowedMonths { get; set; } // like |3|4|5|
    public string RedirectUrl { get; set; }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        if (not allowed) {
            context.Result = new RedirectResult(RedirectUrl);
        }
    }
}

Укажите Order = 0, чтобы он запускался перед другими Authorize проверками, или попробуйте not реализовать IOrderedFilter для него ион также будет выполнен первым.

...