How to seed an Admin user in EF Core 2.1.0?

后端 未结 6 1411
感情败类
感情败类 2020-11-29 02:40

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

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

6条回答
  •  野性不改
    2020-11-29 03:22

    ASP.Net Core 3.1

    That's how I do it using the EntityTypeBuilder :

    Role Configuration:

    public class RoleConfiguration : IEntityTypeConfiguration
    {
        private const string adminId = "2301D884-221A-4E7D-B509-0113DCC043E1";
        private const string employeeId = "7D9B7113-A8F8-4035-99A7-A20DD400F6A3";
        private const string sellerId = "78A7570F-3CE5-48BA-9461-80283ED1D94D";
        private const string customerId = "01B168FE-810B-432D-9010-233BA0B380E9";
    
        public void Configure(EntityTypeBuilder builder)
        {
    
            builder.HasData(
                    new IdentityRole
                    {
                        Id = adminId,
                        Name = "Administrator",
                        NormalizedName = "ADMINISTRATOR"
                    },
                    new IdentityRole
                    {
                        Id = employeeId,
                        Name = "Employee",
                        NormalizedName = "EMPLOYEE"
                    },
                    new IdentityRole
                    {
                        Id = sellerId,
                        Name = "Seller",
                        NormalizedName = "SELLER"
                    },
                    new IdentityRole
                    {
                        Id = customerId,
                        Name = "Customer",
                        NormalizedName = "CUSTOMER"
                    }
                );
        }
    }
    

    User Configuration:

    public class AdminConfiguration : IEntityTypeConfiguration
    {
        private const string adminId = "B22698B8-42A2-4115-9631-1C2D1E2AC5F7";
    
        public void Configure(EntityTypeBuilder builder)
        {
            var admin = new ApplicationUser
            {
                Id = adminId,
                UserName = "masteradmin",
                NormalizedUserName = "MASTERADMIN",
                FirstName = "Master",
                LastName = "Admin",
                Email = "Admin@Admin.com",
                NormalizedEmail = "ADMIN@ADMIN.COM",
                PhoneNumber = "XXXXXXXXXXXXX",
                EmailConfirmed = true,
                PhoneNumberConfirmed = true,
                BirthDate = new DateTime(1980,1,1),
                SecurityStamp = new Guid().ToString("D"),
                UserType = UserType.Administrator                
            };
    
            admin.PasswordHash = PassGenerate(admin);
    
            builder.HasData(admin);
        }
    
        public string PassGenerate(ApplicationUser user)
        {
            var passHash = new PasswordHasher();
            return passHash.HashPassword(user, "password");
        }
    }
    

    Assigning Roles To Users:

     public class UsersWithRolesConfig : IEntityTypeConfiguration>
        {
            private const string adminUserId = "B22698B8-42A2-4115-9631-1C2D1E2AC5F7";
            private const string adminRoleId = "2301D884-221A-4E7D-B509-0113DCC043E1";
    
            public void Configure(EntityTypeBuilder> builder)
            {
                IdentityUserRole iur = new IdentityUserRole
                {
                    RoleId = adminRoleId,
                    UserId = adminUserId
                };
    
                builder.HasData(iur);
            }
        }
    

    Finally in the DB Context class:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    
        //If you have alot of data configurations you can use this (works from ASP.Net core 2.2):
    
        //This will pick up all configurations that are defined in the assembly
        modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
    
        //Instead of this:
        modelBuilder.ApplyConfiguration(new RoleConfiguration());
        modelBuilder.ApplyConfiguration(new AdminConfiguration());
        modelBuilder.ApplyConfiguration(new UsersWithRolesConfig());
    }
    

提交回复
热议问题