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

后端 未结 2 569
说谎
说谎 2020-12-31 20:58

I\'ve looked for this in Stackoverflow and so far it appears there are plenty of questions on adding roles in Identity 1 & 2 but its different in Identity 3.

I w

2条回答
  •  抹茶落季
    2020-12-31 21:37

    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> _roleManager;
        private readonly UserManager _userManager;
    
        public  static async Task Run(IServiceProvider serviceProvider)
        {
            using (var serviceScope =serviceProvider
                                     .GetRequiredService()
                                     .CreateScope())
            {
                var instance = serviceScope.ServiceProvider.GetService();
                await instance.Initialize();
    
                var context = serviceScope.ServiceProvider.GetService();
                if (!context.Products.Any())
                {
                   // Seed Other entities Here
                }
    
                await context.SaveChangesAsync();
            }
        }
    
        public SeedData(UserManager userManager, 
                                      RoleManager> roleManager)
        {
            _roleManager = roleManager;
            _userManager = userManager;
        }
    
        public async Task Initialize()
        {
            foreach (var role in _roles)
            {
                if (!await _roleManager.RoleExistsAsync(role))
                {
                    await _roleManager.CreateAsync(new IdentityRole(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 Program.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>();
                 logger.LogError(ex, "Error while seeding database.");
             }
         }
    
          host.Run();
      }
    

    Might be helpful to someone :)

提交回复
热议问题