Exemplo n.º 1
0
        public async Task <(bool Succeeded, string Error)> SeedDatabaseAdminUserAsync()
        {
            var adminUserSeed = _adminUserSeedOptions.Value;

            adminUserSeed.CheckArgumentIsNull(nameof(adminUserSeed));

            var username    = adminUserSeed.Username;
            var password    = adminUserSeed.Password;
            var email       = adminUserSeed.Email;
            var roleName    = adminUserSeed.RoleName;
            var phoneNumber = adminUserSeed.PhoneNumber;
            var displayName = adminUserSeed.DisplayName;

            var adminUser = await _usersService.FindUserAsync(username);

            if (adminUser != null)
            {
                //_logger.LogInformation($"{thisMethodName}: adminUser already exists.");
                return(true, string.Empty);
            }

            //Create the `Admin` Role if it does not exist
            var adminRole = await _rolesService.FindRoleAsync(roleName);

            if (adminRole == null)
            {
                adminRole = new Role()
                {
                    Name = roleName
                };
                var adminRoleResult = await _rolesService.CreateRoleAsync(adminRole);

                if (!adminRoleResult.Succeeded)
                {
                    //_logger.LogError($"{thisMethodName}: adminRole CreateAsync failed. {adminRoleResult.DumpErrors()}");
                    return(false, adminRoleResult.Error);
                }
            }
            else
            {
                //_logger.LogInformation($"{thisMethodName}: adminRole already exists.");
            }

            adminUser = new User
            {
                Username         = username,
                Email            = email,
                DisplayName      = displayName,
                PhoneNumber      = phoneNumber,
                IsEmailConfirmed = true,
                IsPhoneConfirmed = true,
                IsUserActive     = true,
            };

            var adminUserResult = await _usersService.CreateUserAsync(adminUser, password);

            if (!adminUserResult.Succeeded)
            {
                //_logger.LogError($"{thisMethodName}: adminUser CreateAsync failed. {adminUserResult.DumpErrors()}");
                return(false, adminUserResult.Error);
            }

            //var setLockoutResult = await _applicationUserManager.SetLockoutEnabledAsync(adminUser, enabled: false);
            //if (setLockoutResult == IdentityResult.Failed())
            //{
            //    _logger.LogError($"{thisMethodName}: adminUser SetLockoutEnabledAsync failed. {setLockoutResult.DumpErrors()}");
            //    return IdentityResult.Failed();
            //}

            await _rolesService.AddUserInRoleAsync(adminUser, adminRole);

            //var addToRoleResult = await _rolesService.AddUserInRoleAsync(adminUser,adminRole);//.AddToRoleAsync(adminUser, adminRole.Name);
            //if (addToRoleResult == IdentityResult.Failed())
            //{
            //    _logger.LogError($"{thisMethodName}: adminUser AddToRoleAsync failed. {addToRoleResult.DumpErrors()}");
            //    return IdentityResult.Failed();
            //}

            return(true, string.Empty);
        }