我希望能够扩展IdentityRole的默认实现,以包含Description等字段。为IdentityUser执行此操作非常简单,因为IdentityDbContext采用IdentityUser类型的通用参数。但是,IdentityDbContext不允许您为IdentityRole执行此操作。我怎么能做到这一点?
我知道我可以创建一个基本的DbContext,并实现我自己的IUserStore,这样我就可以使用自己的角色类,但我真的不想这样做。
有什么想法吗?
答案 0 :(得分:10)
我自己刚刚经历过这种痛苦。事实证明它非常简单。只需使用您的新属性扩展IdentityRole。
public class ApplicationRole : IdentityRole
{
public ApplicationRole(string name)
: base(name)
{ }
public ApplicationRole()
{ }
public string Description { get; set; }
}
然后你需要添加一行
new public DbSet<ApplicationRole> Roles { get; set; }
像这样进入你的ApplicationDbContext类,否则会出错。
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{}
new public DbSet<ApplicationRole> Roles { get; set; }
}
这就是我需要做的一切。确保将IdentityRole的所有实例更改为ApplicationRole,包括您正在播种的任何内容。另外,不要忘记发出“更新数据库”以将更改应用于您的数据库。除非将“ApplicationRole”设置为鉴别器,否则新的RoleManager将不会看到其中的任何现有行。你可以自己轻松添加它。
HTH
埃里克
答案 1 :(得分:2)
UserManager<TUser>
使用UserStore<TUser>
作为其用户商店(IUserStore
)。 UserManager
与UserStore
一起使用,可以将用户添加到role name
并将其作为IUserRole删除。
同样,还有接口IRole
&amp; IRoleStore<TRole>
的{{1}}和IdentityRole
RoleStore<TRole>
的{{1}} TRole
。这是直接与Roles一起工作的。
因此,您可以继承IdentityRole
并添加其他信息。使用IdentityRole
管理其他信息。
RoleStore<MyRole>
为Role提供核心交互方法,可以使用MyRoleStore。
MyIdentityRole.cs
RoleManager<TRole>