Asp.Net MVC6 core class How to initially add roles in Identity 3

I searched this in Stackoverflow and there are still a lot of questions about adding roles to Identity 1 and 2 , but different from Identity 3.

I want to sow roles in a database. I have only two. I intended to use the _roleManager, which I injected into the class. Good. My problem is .. there is no way to actually add a role. Using CreateAsync is to add a user to a role. How do you code to add a role using "_userManager" or do you need to do this? another way?

+6
asp.net-mvc asp.net-core asp.net-identity-3
source share
2 answers

EDIT

Identity

In Identity RoleManager is for creating roles, and UserManager is for adding users to roles. This is an example that points you in the right direction. Below is the code to create a new Administrator role

 if (!roleManager.RoleExists("Administrator")) { MyIdentityRole newRole = new MyIdentityRole("Administrator", "Administrators can do something with data"); roleManager.Create(newRole); } 

EDIT

Also, this is for adding a user to a role, and this is also an example:

  \\assuming you test if the user has been assigned to the role "Administrator" before adding them to that role if(RoleAdministrator == true){ userManager.AddToRole(User.Id, "Administrator"); } 
+7
source share
 public class SeedData { private const string _adminRoleName = "admin"; private string _adminEmail = " admin@demo.com "; private string _adminPassword = " P@ssw0rd !PK"; private string[] _roles = new string[] { _adminRoleName, "supervisor" }; private readonly RoleManager<IdentityRole<Guid>> _roleManager; private readonly UserManager<ApplicationUser> _userManager; public static async Task Run(IServiceProvider serviceProvider) { using (var serviceScope =serviceProvider .GetRequiredService<IServiceScopeFactory>() .CreateScope()) { var instance = serviceScope.ServiceProvider.GetService<SeedData>(); await instance.Initialize(); var context = serviceScope.ServiceProvider.GetService<AppDbContext>(); if (!context.Products.Any()) { // Seed Other entities Here } await context.SaveChangesAsync(); } } public SeedData(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole<Guid>> roleManager) { _roleManager = roleManager; _userManager = userManager; } public async Task Initialize() { foreach (var role in _roles) { if (!await _roleManager.RoleExistsAsync(role)) { await _roleManager.CreateAsync(new IdentityRole<Guid>(role)); } } var adminUsers = await _userManager.GetUsersInRoleAsync(_adminRoleName); if (!adminUsers.Any()) { var adminUser = new ApplicationUser() { Id = Guid.NewGuid(), Email = _adminEmail, UserName = _adminEmail }; var result = await _userManager.CreateAsync(adminUser, _adminPassword); if(result.Success) { await _userManager.AddToRoleAsync(adminUser, _adminRoleName); } } } } 

In your Startup.cs

 public static void Main(string[] args) { var host = BuildWebHost(args); using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; try { SeedData.Run(services).Wait(); } catch (Exception ex) { var logger = services.GetRequiredService<ILogger<Program>>(); logger.LogError(ex, "Error while seeding database."); } } host.Run(); } 

May be useful for someone :)

0
source share

All Articles