How to create "RoleManager<IdentityRole>" in ASP.Net Core?

Solution 1:

Do you have the Identity services registered? Also, I ran into issues when I used .Wait() instead of await.

  services.AddIdentity<ApplicationUser,IdentityRole>(options=>
        {
            options.User.RequireUniqueEmail = true;               
            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
            options.Password.RequireNonAlphanumeric = false;
            options.Password.RequireUppercase = false;      

        })
            .AddDefaultTokenProviders()
            .AddDefaultUI()
            .AddRoles<IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>();
        services.AddAuthorization();
        services.AddAuthentication();
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); 

If this helps, here is how I seeded my Db.

  public SeedDataBase(IServiceProvider _serviceProvider, ApplicationDbContext _context)
    {
        serviceProvider = _serviceProvider;
        context = _context;

    }
    private IServiceProvider serviceProvider;
    private ApplicationDbContext context;
    private ApplicationUser superUser;

    public async Task Seed()
    {

        await CreateSuperUser();
        await SeedDb();
    }
    private async Task CreateSuperUser()
    {
        var _userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
        var userExists = await _userManager.GetUsersInRoleAsync("FULLADMIN");

        if (userExists.Count() < 1)
        {
            var _roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
            var _signinManger = serviceProvider.GetRequiredService<SignInManager<ApplicationUser>>();

            superUser = new ApplicationUser()
            {
                UserName = "[email protected]",
                Email = "[email protected]",
                FirstName = "Super",
                LastName = "User",
                AccountCreationDate = DateTime.Now.ToShortDateString(),
                Access = ApplicationUser.Permissions.FullAdmin
            };
            var permissions = Enum.GetNames(typeof(ApplicationUser.Permissions));

            foreach (var s in permissions)
            {
                await _roleManager.CreateAsync(new IdentityRole(s));
            }
            await _userManager.CreateAsync(superUser, "SecureP@ssword1234");
            await _userManager.AddToRoleAsync(superUser, Enum.GetName(typeof(ApplicationUser.Permissions), superUser.Access));
        }
    }