首页 > 解决方案 > 在 ASP.Net Core 的 ConfigureServices 中访问数据库(EF Core DbContext)

问题描述

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

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

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

标签: asp.net-coreentity-framework-coreasp.net-authorization

解决方案


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

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);
        });
    }
});

推荐阅读