Сервисы запуска AddAuthorization AddPolicy: Пустое требование - PullRequest
0 голосов
/ 17 января 2019

Я немного новичок в веб-разработке. У меня есть RestController, который имеет много методов, например (Получить, GetById, Создать, Обновить). Я использую атрибут Authorize, который используется с политикой. Эта политика зависит от переменной bool. Вы можете увидеть ниже.

Сейчас я использую этот обходной путь, но я ищу более подходящее решение.

services.AddAuthorization(o =>
    {
        o.AddPolicy("UserRoleCheck", p =>
        {
            if (C.RequiredAuth)
            {
                p.RequireAuthenticatedUser();
                p.AssertRole(Roles.User);
            }
            else
            {
                p.AddRequirements(new EmptyRequirement()); // Here I don't want to else branch
            }

        });
    });  

public class EmptyRequirement : AuthorizationHandler<EmptyRequirement>, IAuthorizationRequirement
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, EmptyRequirement requirement)
    {
        context.Succeed(requirement);
        return Task.CompletedTask;
    }
}

Это работа, но можете ли вы предложить мне более красивое решение?

1 Ответ

0 голосов
/ 24 января 2019

Для вашего текущего проекта это вызвано тем, что Policy должен содержать хотя бы одно требование.

Не уверен, каково определение для C, я предлагаю вам реализовать UserRoleCheckRequirement и переместить C в UserRoleCheckRequirement, чтобы вернуть context.Succeed(requirement);. А затем проверьте AuthenticatedUser и другую логику авторизации в HandleRequirementAsync.

...