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

后端 未结 2 548
说谎
说谎 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<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 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<ILogger<Program>>();
                 logger.LogError(ex, "Error while seeding database.");
             }
         }
    
          host.Run();
      }
    

    Might be helpful to someone :)

    0 讨论(0)
  • 2020-12-31 21:38

    EDIT

    Identity

    In Identity RoleManager is for creating roles and UserManager is for adding users to roles. This is an example to point you in the right direction. The code below is for creating a new role Administrator

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

    EDIT

    Further, this is for adding a user to a role and this 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");
           }
    
    0 讨论(0)
提交回复
热议问题