How to Extend Microsoft.AspNet.Identity.EntityFramework.IdentityRole

前端 未结 2 617
情话喂你
情话喂你 2021-01-03 15:13

I want to be able to extend the default implementation of IdentityRole to include fields like Description. It\'s easy enough to do this for IdentityUser because IdentityDbCo

相关标签:
2条回答
  • 2021-01-03 15:23

    UserManager<TUser> uses UserStore<TUser> as its user store (IUserStore). UserManager works with UserStore for adding and removing user to a role name as IUserRole.

    Likewise, there are interfaces IRole & IRoleStore<TRole> for IdentityRole and RoleStore<TRole> where TRole is IdentityRole. This is to work plainly with Roles directly.

    So you can inherit IdentityRole and add additional information. Use RoleStore<MyRole> to manage it along additional information.

    RoleManager<TRole> provides core interaction methods for Role, which can use MyRoleStore.

    MyIdentityRole.cs

    public class MyIdentityRole: IdentityRole
    {
       public String Description { get; set;}
    }
    
    0 讨论(0)
  • 2021-01-03 15:32

    I have just gone through this pain myself. It actually turned out to be pretty simple. Just extend IdentityRole with your new properties.

    public class ApplicationRole : IdentityRole
    {
        public ApplicationRole(string name)
            : base(name)
        { }
    
        public ApplicationRole()
        { }
    
        public string Description { get; set; }
    }
    

    Then you need to add the line

    new public DbSet<ApplicationRole> Roles { get; set; }
    

    into your ApplicationDbContext class like this otherwise you will get errors.

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection")
        {}
    
        new public DbSet<ApplicationRole> Roles { get; set; }
    }
    

    thats all I needed to do. Make sure you change all instances of IdentityRole to ApplicationRole including anything you are seeding. Also, dont forget to issue a "update-database" to apply the changes to your DB. Any existing rows in there won't be seen by your new RoleManager unless you have the "ApplicationRole" set as a discriminator. You can easily add this yourself.

    HTH

    Erik

    0 讨论(0)
提交回复
热议问题