在ASP.Net Core的ConfigureServices中访问数据库EF Core DbContext

问题描述

我想向ASP.Net Core授权添加一些策略,这些策略存储在我的数据库(带有MysqL的EF Core)中。目的是根据用户权限限制用户的访问权限。据我所知,我应该在ConfigureServices类的Startup方法中做到这一点:

services.AddAuthorizationCore(options =>
{
  options.AddPolicy("CanEditUserGroups",builder =>
  {
    builder.RequireAuthenticatedUser();
    builder.RequireClaim("Permission","Value");
  });
});

但是,问题是我想拥有多个策略并从数据库中读取它们的"Value"。可以实例化我的DbContext服务并从中读取数据吗?我做对了吗?

解决方法

我找到了解决方案。对于将来可能会遇到此问题的人,这是一种解决方法:

var serviceProvider = services.BuildServiceProvider();
var permissionRepository =
    (IPermissionRepository)serviceProvider.GetService<IPermissionRepository>();
var permissions = permissionRepository.GetAll();

services.AddAuthorizationCore(options =>
{
    foreach (var permission in permissions)
    {
        options.AddPolicy("permission.Title",builder =>
        {
            builder.RequireAuthenticatedUser();
            builder.RequireClaim("Permission",permission.Title);
        });
    }
});