доступ к dbcontext в обработчике требований политики авторизации - PullRequest
0 голосов
/ 01 февраля 2020

в предыдущей публикации за несколько лет go - Может ли авторизация на основе политики быть более динамичной c?

один из ответов предлагает следующий код:


Затем определите обработчик.

public class MinimumAgeHandler : AuthorizationHandler<DataDrivenRequirement>
{
    protected override void Handle(AuthorizationContext context, 
                                   DataDrivenRequirement requirement)
    {
        // Do anything here, **interact with DB**, User, claims, Roles, etc.
        // As long as you set either:
        //    context.Succeed(requirement);
        //    context.Fail();
    }
}

Я использую. NET Core 3 MVC с EntityFrameworkCore. Я sh для взаимодействия с базой данных в обработчике. Обработчику не передается dbcontext, как контроллеру. Я пробовал несколько способов сделать это без какого-либо успеха. Кто-нибудь знает, как получить доступ к dbcontext отсюда?

Точно так же, как вы знаете, ближе всего я использовал следующий код из другого поста - Как получить доступ к dbcontext & session в пользовательской авторизации на основе политик

public class CheckAuthorizeHandler : AuthorizationHandler<CheckAuthorizeRequirement>
{
    MyContext _context;

    public CheckAuthorizeHandler(MyContext context)
    {
        _context = context;
    }

    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context, 
        MyRequirement requirement)
    {
        // Do something with _context
        // Check if the requirement is fulfilled.
        return Task.CompletedTask;
    }
}

, но возникла следующая ошибка: InvalidOperationException: Не удалось использовать службу с ограниченным доступом 'NASAppsAdmin.Models.NASAppsDbContext' из синглтона 'Microsoft.AspNetCore.Authorization.IAuthorizationHandler'.

1 Ответ

0 голосов
/ 04 февраля 2020

InvalidOperationException: Невозможно использовать ограниченную службу NASAppsAdmin.Models.NASAppsDbContext из одноэлементного Microsoft.AspNetCore.Authorization.IAuthorizationHandler. Контексты Entity Framework, как правило, добавляются в контейнер службы с использованием времени существования области. Если вы хотите использовать контекст базы данных из вашего обработчика, пожалуйста, убедитесь, что ваш обработчик не зарегистрирован как одиночный. - Фэй Хан

...