因此我的系统要求角色具有关联的到期日期。我已经实现了 Identity 2.0 框架,一切进展顺利,但我遇到了一个让我怀疑我的结构的问题。
public class ApplicationUserRole : IdentityUserRole
{
public override string UserId { get; set; }
public override string RoleId { get; set; }
public DateTime Expiry { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
static ApplicationDbContext()
{
Database.SetInitializer<ApplicationDbContext>(null);
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public DbSet<ApplicationUserRole> ApplicationUserRoles { get; set; }
}
这就是我想要的。它更改了 AspNetUserRoles 表,以便添加第三列,这是一个名为 Expiry 的 DateTime。我可以使用 ApplicationDBContext 添加、更新和删除过期时间,在编辑用户时一切正常。
问题出现在帐户创建时。 UserManager 调用 AddToRolesAsync,但只采用两个参数,User 和 Role。我需要它来获取用户、角色和到期时间。
我需要实现自己的 UserManager 吗?这似乎有点矫枉过正。
我可以通过不允许在帐户创建时选择角色/到期时间并将其保留为编辑模式来解决这个问题。但我真的很想能够同时创建帐户和分配角色/到期。
最佳答案
请观看以下有关使用现有数据库表使用 asp.net 标识的视频教程。我认为您必须让 ApplicationUser 表知道您的 ApplicationUserRole 表中有新字段。因此,您必须遵循 Entity Framework 模型绑定(bind)才能实现这一目标。
第 1 部分 - https://www.youtube.com/watch?v=elfqejow5hM
第 2 部分 - https://www.youtube.com/watch?v=JbSqi3Amatw
你不需要实现你自己的userManager,但是你必须修改它。希望您可以使用此示例来支持您的需求。
关于c# - 在 Identity 2.0 中扩展 IdentityUserRole,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25857806/