Ядро ASP.NET: [Авторизация на основе политик] Не указана схема аутентификации, и не найден DefaultChallengeScheme - PullRequest
0 голосов
/ 30 мая 2019

Я использую аутентификацию на основе политик для предоставления доступа на основе прав в меню для авторизованного пользователя. Если в меню есть доступ, я звоню context.Succeed(requirement);, но в случае ошибки (несанкционированный доступ к меню) я хочу перенаправить его на домашнюю страницу. Как я могу достичь этого в filterContext.Result? Вот мой код:

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) {
    var filterContext = context.Resource as AuthorizationFilterContext;
    var sessionObj = SessionManager.GetObjectFromJson<AuthenticateUserInfo>(filterContext.HttpContext.Session, "oLoginModel");
    if (context.User == null)
    {
        // no user authorizedd. Alternatively call context.Fail() to ensure a failure 
        // as another handler for this requirement may succeed
        context.Fail();
        //filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Login", action = "LogOn" }));
        return Task.CompletedTask;
    }
    //var obj = context.Requirements.
    bool hasPermission = sessionObj == null ? false : sessionObj.Menus.Any(m => m.ControllerName == requirement.ControllerName); //.Any(= requirement.ControllerName);
    if (hasPermission)
    {
        context.Succeed(requirement);
    }
    else
    {
        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index", area = "" }));
    }
    return Task.CompletedTask;
}

Я имею в виду Ссылка перенаправления из атрибута фильтра действий , но она предназначена для ASP.NET MVC, и я уже реализован в MVC, но не работаю в MVC Core.

...