private static async Task InitializeMembers(IServiceProvider serviceProvider, AppDbContext db)
        {
            var config      = serviceProvider.GetRequiredService <IConfiguration>();
            var userManager = serviceProvider.GetRequiredService <UserManager <ApplicationUser> >();

            var users = config.GetSection("Users:Members").GetChildren();

            foreach (var user in users)
            {
                var userName = user["UserName"];
                var userPass = user["Password"];
                if (string.IsNullOrWhiteSpace(userPass))
                {
                    userPass = "******" + Guid.NewGuid();
                }

                var userEmail    = user["Email"];
                var userFullName = user["FullName"];
                var newUser      = await userManager.FindByNameAsync(userName);

                if (newUser != null)
                {
                    continue;
                }

                newUser = new ApplicationUser
                {
                    UserName  = userName,
                    Email     = userEmail,
                    IsAdmin   = false,
                    IsManager = false,
                    IsActive  = true
                };

                var userCreationResult = await userManager.CreateAsync(newUser, userPass);

                if (!userCreationResult.Succeeded)
                {
                    continue;
                }

                var memberUser = await userManager.FindByNameAsync(newUser.UserName);

                await userManager.AddToRoleAsync(memberUser, Constants.UserRole);

                var newMember = new Member
                {
                    UserId   = memberUser.Id,
                    FullName = userFullName
                };

                await db.Members.AddAsync(newMember);

                await db.SaveChangesAsync();

                // Assigns claims.
                var claims = ClaimsCreator.GetUserClaims(memberUser.UserName, userFullName, userEmail, Constants.UserRole, newMember.Id);
                await userManager.AddClaimsAsync(memberUser, claims);
            }
        }
Beispiel #2
0
        private async Task <Member> CreateNewUserCommon(MemberView memberView, ApplicationUser newUser, string userRole)
        {
            var userByName = Uow.UserRepository.LinkedCacheGetByName(memberView.UserName);

            if (userByName != null)
            {
                throw new CoralTimeAlreadyExistsException($"User with userName {memberView.UserName} already exist");
            }

            // Identity #1. Create User in db.AspNetUsers.
            var userCreationResult = await _userManager.CreateAsync(newUser, memberView.Password);

            if (!userCreationResult.Succeeded)
            {
                CheckIdentityResultErrors(userCreationResult);
            }

            // Identity #2. Create role for user in db.AspNetUserRoles.
            var memberUser = await _userManager.FindByNameAsync(newUser.UserName);

            var userCreateRoleResult = await _userManager.AddToRoleAsync(memberUser, UserRole);

            if (!userCreateRoleResult.Succeeded)
            {
                CheckIdentityResultErrors(userCreateRoleResult);
            }

            #region Set UserId to new Member. Save to Db. Get Member from Db with related entity User by UserId.

            // 1. Convert MemberView to Member.
            var newMember = Mapper.Map <MemberView, Member>(memberView);

            // 2. Assign UserId to Member (After Save, when you try to get entity from Db, before assign UserId to entity then it has Related Entity User).
            newMember.UserId = memberUser.Id;

            // 3. Save in Db.
            Uow.MemberRepository.Insert(newMember);
            Uow.Save();

            // 4. Clear cache for Members.
            Uow.MemberRepository.LinkedCacheClear();

            // 5. Get From Db -> Cache New Member. (Get entity With new created related entity - User)
            var memberByName = Uow.MemberRepository.LinkedCacheGetByName(memberView.UserName);

            #endregion

            // Identity #3. Create claims. Add Claims for user in AspNetUserClaims.
            var claimsUser       = ClaimsCreator.GetUserClaims(memberUser.UserName, memberView.FullName, memberView.Email, userRole, memberByName.Id);
            var claimsUserResult = await _userManager.AddClaimsAsync(memberUser, claimsUser);

            if (!claimsUserResult.Succeeded)
            {
                CheckIdentityResultErrors(userCreateRoleResult);
            }

            return(memberByName);
        }
Beispiel #3
0
        public void UpdateUserClaims(int memberId)
        {
            var memberById = Uow.MemberRepository.GetQueryWithIncludes().FirstOrDefault(m => m.Id == memberId);

            #region v1.

            //try
            //{
            //    memberById.User.Claims.Clear();
            //    Uow.MemberRepository.Update(memberById);
            //    Uow.Save();

            //    // Assigns claims.
            //    var claims = ClaimsCreator.GetUserClaims(memberById.User.UserName, memberById.FullName, memberById.User.Email, memberById.User.IsAdmin ? AdminRole : UserRole, memberId);

            //    _userManager.AddClaimsAsync(memberById.User, claims).GetAwaiter().GetResult();

            //    ClearCacheMembers();
            //}

            //catch (Exception) { }

            #endregion

            #region v2.

            //memberByName.User.Claims.Clear();
            //memberByName.User.Claims.Add(new IdentityUserClaim<string> { ClaimType = JwtClaimTypes.Email, ClaimValue = memberByName.User.Email, });
            //var updatememberByNameClaims = _userManager.UpdateAsync(memberByName.User).GetAwaiter().GetResult();
            //if (!updatememberByNameClaims.Succeeded)
            //{
            //    BLHelpers.CheckMembersErrors(updatememberByNameClaims.Errors.Select(e => new IdentityErrorView
            //    {
            //        Code = e.Code,
            //        Description = e.Description
            //    }));
            //}

            #endregion

            var memberByNameClaims = _userManager.GetClaimsAsync(memberById.User).GetAwaiter().GetResult();
            var removeClaimsForMember = _userManager.RemoveClaimsAsync(memberById.User, memberByNameClaims).GetAwaiter().GetResult();
            if (!removeClaimsForMember.Succeeded)
            {
                CheckIdentityResultErrors(removeClaimsForMember);
            }

            var claimsForMemberNew = ClaimsCreator.GetUserClaims(memberById.User.UserName, memberById.FullName, memberById.User.Email, memberById.User.IsAdmin ? AdminRole : UserRole, memberById.Id);
            var addClaimsForMember = _userManager.AddClaimsAsync(memberById.User, claimsForMemberNew).GetAwaiter().GetResult();
            if (!addClaimsForMember.Succeeded)
            {
                CheckIdentityResultErrors(addClaimsForMember);
            }
        }