ASP.Net Core 的 ConfigureServices 中的 Access 数据库(EF Core DbContext)
Access database (EF Core DbContext) in ConfigureServices of ASP.Net Core
我想向 ASP.Net Core 授权添加一些策略,这些策略存储在我的数据库中(带有 MySQL 的 EF Core)。目标是根据用户的权限限制用户的访问。据我所知,我应该在 Startup
class 的 ConfigureServices
方法中这样做:
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);
});
}
});
我想向 ASP.Net Core 授权添加一些策略,这些策略存储在我的数据库中(带有 MySQL 的 EF Core)。目标是根据用户的权限限制用户的访问。据我所知,我应该在 Startup
class 的 ConfigureServices
方法中这样做:
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);
});
}
});