в предыдущей публикации за несколько лет 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'.