Exemplo n.º 1
0
        /// <summary>
        /// 创建角色
        /// </summary>
        /// <param name="serviceProvider"></param>
        private static async Task CreateRoles(IServiceProvider serviceProvider, AppDbContext context)
        {
            var configuration = serviceProvider.GetService <IConfiguration>();

            var roles      = RoleHelper.GetBuiltInRoles();
            var existRoles = context.Roles.ToList();

            if (roles.Count > existRoles.Count)
            {
                foreach (var role in roles)
                {
                    if (!existRoles.Any(x => x.Name == role.Name))
                    {
                        role.CreateTime = DateTime.UtcNow;
                        role.LastUpdate = role.CreateTime;
                        context.Roles.Add(role);
                    }
                }
                await context.SaveChangesAsync();
            }

            var uid      = 0;
            var userName = configuration["AdminAccount:UserName"];

            if (context.Users.Count(x => x.UserName == userName) == 0)
            {
                var poweruser = new AspNetUser
                {
                    UserName     = userName,
                    PasswordHash = Hash.GetMd5(configuration["AdminAccount:Password"]),
                    CreateTime   = DateTime.UtcNow,
                    LastUpdate   = DateTime.UtcNow,
                    AuthorityId  = Guid.NewGuid().ToString("N")
                };
                context.Users.Add(poweruser);
                await context.SaveChangesAsync();

                uid = poweruser.Id;
            }
            else
            {
                uid = context.Users.Single(x => x.UserName == userName).Id;
            }

            var b = (await context.QueryNumberBySqlAsync($"SELECT COUNT(b.Id) FROM AspNetRole a,AspNetUserRole b WHERE a.Id=b.RoleId AND b.UserId={uid} AND a.Name='{nameof(RoleTypes.Admin)}'")) == 0;

            if (b)
            {
                var userrole = new AspNetUserRole()
                {
                    RoleId     = context.Roles.Single(x => x.Name == nameof(RoleTypes.Admin)).Id,
                    UserId     = uid,
                    CreateTime = DateTime.UtcNow
                };

                context.UserRoles.Add(userrole);
                await context.SaveChangesAsync();
            }
        }