private async Task <bool> UpdateUserRoles(UserViewModel userViewModel, ApplicationUser user)
        {
            if (user.IsSuperAdmin())
            {
                throw (new Exception("Operation not allowed"));
            }

            var addRoles = userViewModel.RoleViewModels.Where(x => x.HasRole).Select(x => x.RoleName).ToArray();

            foreach (var role in addRoles)
            {
                var result = await _usersRepository.AddToRole(user, role);

                var userAlreadyInRoleErrors = result.Errors.Any() &&
                                              result.Errors.Select(x => x == RoleErrors.UserAlreadyInRole).Count() ==
                                              result.Errors.Count();
                if (!result.Succeeded && !userAlreadyInRoleErrors)
                {
                    AddErrors(new IdentityResult(result.Errors));
                    return(false);
                }
            }

            var removeRoles = userViewModel.RoleViewModels.Where(x => !x.HasRole).Select(x => x.RoleName).ToArray();

            foreach (var role in removeRoles)
            {
                var result = await _usersRepository.RemoveFromRole(user, role);

                var userIsNotInRoleErrors = result.Errors.Any() &&
                                            result.Errors.Select(x => x == RoleErrors.UserIsNotInRole).Count() ==
                                            result.Errors.Count();
                if (!result.Succeeded && !userIsNotInRoleErrors)
                {
                    AddErrors(new IdentityResult(result.Errors));
                    return(false);
                }
            }

            return(true);
        }