Как заполнить базу данных аутентификации в ASP NET MVC - PullRequest
0 голосов
/ 24 февраля 2020

В каком модуле я делаю посев из БД? Я хочу добавить роли и пользователей, если они еще не существуют. В NET Core я бы использовал файл запуска следующим образом:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

        using (IServiceScope serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
        {

             var dbContext = serviceScope.ServiceProvider.GetService<ApplicationDbContext>();
            var roleManager = serviceScope.ServiceProvider.GetService<RoleManager<IdentityRole>>();
            var userManager = serviceScope.ServiceProvider.GetService<UserManager<User>>();

            DbSeeder.Seed(Configuration, dbContext, roleManager, userManager);

        }
      }

, а в моем классе DBSeeder:

public static class DbSeeder
{
    public static void Seed(IConfiguration configuration,
        ApplicationDbContext dbContext,
        RoleManager<IdentityRole> roleManager,
        UserManager<User> userManager)
    {
        if (!dbContext.Users.Any()) CreateUsers(configuration, dbContext, roleManager, userManager).GetAwaiter().GetResult();
    }

    private static async Task CreateUsers(IConfiguration configuration,
                                          ApplicationDbContext dbContext,
                                          RoleManager<IdentityRole> roleManager,
                                          UserManager<User> userManager)
    {

        string role_Administrator = "Administrator";
        string role_RegisteredUser = "RegisteredUser";

        if (!await roleManager.RoleExistsAsync(role_Administrator))
        {
            await roleManager.CreateAsync(new IdentityRole(role_Administrator));
        }
        if (!await roleManager.RoleExistsAsync(role_RegisteredUser))
        {
            await roleManager.CreateAsync(new IdentityRole(role_RegisteredUser));
        }

        var user_Admin = new User()
        {
            SecurityStamp = Guid.NewGuid().ToString(),
            UserName = "Admin",
            Email = configuration["ContactUs"],
            DisplayName = "Admin",
            EmailConfirmed = true
        };
        if (await userManager.FindByNameAsync(user_Admin.UserName) == null)
        {
            await userManager.CreateAsync(user_Admin, "Pass4Admin");
            await userManager.AddToRoleAsync(user_Admin, role_RegisteredUser);
            await userManager.AddToRoleAsync(user_Admin, role_Administrator);
        }


        await dbContext.SaveChangesAsync();
    }
...