ApiAuthorizationDbContext 的自定义角色 class
Custom Roles class for ApiAuthorizationDbContext
在过去的 2 天里,我一直在尝试获取 ApiAuthorizationDbContext 来设置自定义 IdentityRole。使用 IdentityDbContext 可以按如下方式完成:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
在 blazor 项目模板中,ApplicationDbContext 的声明如下:
public class ApplicationDbContext : ApiAuthorizationDbContext<ApplicationUser>
{
public ApplicationDbContext(
DbContextOptions options,
IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions)
{
}
}
如何使用 ApiAuthorizationDbContext 执行类似的操作。我无法从 ApiAuthorizationDbContext class.
中找到这种支持
谢谢。
我没有找到自定义角色的方法 class 但我找到了解决问题的方法并将属性添加到现有的 IdentityRole class 并且会回答我的问题以防万一其他人需要做类似的事情。解决这个问题的办法就是Shadow属性。
例如,如果我想为 IdentityRole class 创建 DateTime 属性,我们可以在 DBContext class.
中使用以下代码
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<IdentityRole>().Property<DateTime>("LastUpdated");
base.OnModelCreating(builder);
}
现在我们可以像这样访问 属性:
context.Entry(myRole).Property("LastUpdated").CurrentValue = DateTime.Now;
它不像拥有自定义 class 那样容易,但至少它让我有机会拥有 IdentityRole class.
的自定义属性
来自@javiercn
ApiAuthorizationDbContext is a convenience class to get you started.
https://github.com/dotnet/aspnetcore/issues/14161#issuecomment-533468760
我创建这个 ApplicationApiAuthorizationDbContext
是为了让它与角色一起工作。
//Based on Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ApiAuthorizationDbContext, Version=6.0.2.0
//https://github.com/dotnet/aspnetcore/issues/14161#issuecomment-533468760
public class ApplicationApiAuthorizationDbContext<TUser, TRole> : IdentityDbContext<TUser, TRole, string>, IPersistedGrantDbContext, IDisposable where TUser : IdentityUser where TRole : IdentityRole
{
private readonly IOptions<OperationalStoreOptions> _operationalStoreOptions;
public DbSet<PersistedGrant> PersistedGrants
{
get;
set;
}
public DbSet<DeviceFlowCodes> DeviceFlowCodes
{
get;
set;
}
public DbSet<Key> Keys
{
get;
set;
}
public ApplicationApiAuthorizationDbContext(DbContextOptions options, IOptions<OperationalStoreOptions> operationalStoreOptions)
: base(options)
{
_operationalStoreOptions = operationalStoreOptions;
}
Task<int> IPersistedGrantDbContext.SaveChangesAsync()
{
return base.SaveChangesAsync();
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ConfigurePersistedGrantContext(_operationalStoreOptions.Value);
}
}
在 EF Core 5.0 和 EF Core 6.0 中添加角色的完整示例:
在过去的 2 天里,我一直在尝试获取 ApiAuthorizationDbContext 来设置自定义 IdentityRole。使用 IdentityDbContext 可以按如下方式完成:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
在 blazor 项目模板中,ApplicationDbContext 的声明如下:
public class ApplicationDbContext : ApiAuthorizationDbContext<ApplicationUser>
{
public ApplicationDbContext(
DbContextOptions options,
IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions)
{
}
}
如何使用 ApiAuthorizationDbContext 执行类似的操作。我无法从 ApiAuthorizationDbContext class.
中找到这种支持谢谢。
我没有找到自定义角色的方法 class 但我找到了解决问题的方法并将属性添加到现有的 IdentityRole class 并且会回答我的问题以防万一其他人需要做类似的事情。解决这个问题的办法就是Shadow属性。
例如,如果我想为 IdentityRole class 创建 DateTime 属性,我们可以在 DBContext class.
中使用以下代码protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<IdentityRole>().Property<DateTime>("LastUpdated");
base.OnModelCreating(builder);
}
现在我们可以像这样访问 属性:
context.Entry(myRole).Property("LastUpdated").CurrentValue = DateTime.Now;
它不像拥有自定义 class 那样容易,但至少它让我有机会拥有 IdentityRole class.
的自定义属性来自@javiercn
ApiAuthorizationDbContext is a convenience class to get you started.
https://github.com/dotnet/aspnetcore/issues/14161#issuecomment-533468760
我创建这个 ApplicationApiAuthorizationDbContext
是为了让它与角色一起工作。
//Based on Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ApiAuthorizationDbContext, Version=6.0.2.0
//https://github.com/dotnet/aspnetcore/issues/14161#issuecomment-533468760
public class ApplicationApiAuthorizationDbContext<TUser, TRole> : IdentityDbContext<TUser, TRole, string>, IPersistedGrantDbContext, IDisposable where TUser : IdentityUser where TRole : IdentityRole
{
private readonly IOptions<OperationalStoreOptions> _operationalStoreOptions;
public DbSet<PersistedGrant> PersistedGrants
{
get;
set;
}
public DbSet<DeviceFlowCodes> DeviceFlowCodes
{
get;
set;
}
public DbSet<Key> Keys
{
get;
set;
}
public ApplicationApiAuthorizationDbContext(DbContextOptions options, IOptions<OperationalStoreOptions> operationalStoreOptions)
: base(options)
{
_operationalStoreOptions = operationalStoreOptions;
}
Task<int> IPersistedGrantDbContext.SaveChangesAsync()
{
return base.SaveChangesAsync();
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ConfigurePersistedGrantContext(_operationalStoreOptions.Value);
}
}
在 EF Core 5.0 和 EF Core 6.0 中添加角色的完整示例: