如何在EF Core 2.1.0中播种Admin用户? [英] How to seed an Admin user in EF Core 2.1.0?

查看:78
本文介绍了如何在EF Core 2.1.0中播种Admin用户?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用EF Core 2.1.0的ASP.NET Core 2.1.0应用程序.

I have an ASP.NET Core 2.1.0 application using EF Core 2.1.0.

我该如何向Admin用户播种数据库并赋予他/她一个Admin角色?我找不到与此有关的任何文档.

How do I go about seeding the database with Admin user and give him/her an Admin role? I cannot find any documentation on this.

推荐答案

由于无法在Identity中以常规方式为用户添加种子,就像使用.NET Core 2.1的.HasData()为其他表添加种子一样.

As user cannot be seeded in a normal way in Identity just like other tables are seeded using .HasData() of .NET Core 2.1.

Microsoft建议:对于需要调用外部API的数据,例如ASP.NET Core Identity用户创建,建议使用自定义初始化逻辑.

Microsoft Recommendation: For data that requires calls to external API, such as ASP.NET Core Identity users creation it is recommended to use custom initialization logic.

种子角色:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);

        modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "Admin", NormalizedName = "Admin".ToUpper() });
    }

请按照以下步骤操作

使用角色来种子用户.

Seed Users With Roles by Following the steps given below.

步骤1:创建新课程

public static class ApplicationDbInitializer
{
    public static void SeedUsers(UserManager<IdentityUser> userManager)
    {
        if (userManager.FindByEmailAsync("abc@xyz.com").Result==null)
        {
            IdentityUser user = new IdentityUser
            {
                UserName = "abc@xyz.com",
                Email = "abc@xyz.com"
            };

            IdentityResult result = userManager.CreateAsync(user, "PasswordHere").Result;

            if (result.Succeeded)
            {
                userManager.AddToRoleAsync(user, "Admin").Wait();
            }
        }       
    }   
}

步骤2:现在修改Startup.cs类中的ConfigureServices方法.

Step 2: Now Modify ConfigureServices method in Startup.cs class.

修改前:

services.AddDefaultIdentity<IdentityUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>();

修改后:

services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>();

步骤3:修改Startup.cs类中Configure方法的参数.

Step 3: Modify parameters of Configure Method in Startup.cs class.

修改前:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        //..........
    }

修改后:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, UserManager<IdentityUser> userManager)
    {
        //..........
    }

第4步:我们的Seed(ApplicationDbInitializer)类的调用方法:

Step 4 : Calling method of our Seed (ApplicationDbInitializer) class:

ApplicationDbInitializer.SeedUsers(userManager);

注意:您还可以像注入用户一样,将RoleManagerUserManager一起注入种子角色.

Note: You can also Seed Roles just like users by Injecting the RoleManager along with UserManager.

这篇关于如何在EF Core 2.1.0中播种Admin用户?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆