Esempio n. 1
0
        /// <summary>
        /// Adds the user to super admin group.
        /// </summary>
        /// <param name="createdUser">The created user.</param>
        /// <returns></returns>
        public async Task AddUserToSuperAdminGroup(User createdUser)
        {
            var principalsResponse = await tokenDataProvider.GetPrincipals(createdUser.TokenServiceUserId);

            principalsResponse.Groups.Add(TokenServiceGroupGuids.SuperAdmin);

            var principalsUpdateRequest = Mapper.Map <UpdatePrincipalModel>(principalsResponse);

            await tokenDataProvider.UpdatePrincipals(principalsResponse.Id, principalsUpdateRequest);
        }
        /// <summary>
        /// Updates the customer user.
        /// </summary>
        /// <param name="customerUser">The customer user.</param>
        /// <param name="bearerToken">The bearer token.</param>
        /// <returns></returns>
        public async Task <UpdateCustomerUserResultDto> UpdateCustomerUser(CustomerUser customerUser, string bearerToken)
        {
            var result = new UpdateCustomerUserResultDto();

            if (customerUser == null)
            {
                throw new ArgumentNullException("customerUser");
            }

            if (string.IsNullOrEmpty(bearerToken))
            {
                throw new ArgumentNullException("bearerToken");
            }

            var existingCustomerUser =
                (await customerUsersRepository.FindAsync(
                     u => u.Id == customerUser.Id && u.CustomerId == customerUser.CustomerId))
                .SingleOrDefault();

            if (existingCustomerUser == null)
            {
                result.Error = CreateUpdateCustomerUserErrorState.CustomerUserDoesNotExist;

                return(result);
            }

            if (
                !String.Equals(existingCustomerUser.Email, customerUser.Email, StringComparison.CurrentCultureIgnoreCase))
            {
                if ((await GetCustomerUserByEmail(customerUser.Email, true)) != null)
                {
                    result.Error = CreateUpdateCustomerUserErrorState.EmailAlreadyExists;
                }
            }

            var existingCustomer = await customersService.GetCustomer(customerUser.CustomerId, bearerToken);

            if (existingCustomer == null)
            {
                if (result.Error.HasValue)
                {
                    result.Error |= CreateUpdateCustomerUserErrorState.CustomerDoesNotExist;
                }
                else
                {
                    result.Error = CreateUpdateCustomerUserErrorState.CustomerDoesNotExist;
                }
            }
            else
            {
                var customerSitesIds = existingCustomer.Sites.Select(s => s.Id).ToList();

                if (customerUser.CustomerUserSites != null &&
                    !customerSitesIds.Contains(customerUser.CustomerUserSites.Select(s => s.SiteId).ToArray()))
                {
                    if (result.Error.HasValue)
                    {
                        result.Error |= CreateUpdateCustomerUserErrorState.SitesDoNotExistWithinCustomer;
                    }
                    else
                    {
                        result.Error = CreateUpdateCustomerUserErrorState.SitesDoNotExistWithinCustomer;
                    }
                }
            }

            if (existingCustomerUser.CustomerUserRoleId != customerUser.CustomerUserRoleId)
            {
                var customerUserRoles = await GetCustomerUserRolesForCustomer(customerUser.CustomerId);

                if (customerUserRoles.All(cr => cr.Id != customerUser.CustomerUserRoleId))
                {
                    if (result.Error.HasValue)
                    {
                        result.Error |= CreateUpdateCustomerUserErrorState.CustomerUserRoleDoesNotExistWithinCustomer;
                    }
                    else
                    {
                        result.Error = CreateUpdateCustomerUserErrorState.CustomerUserRoleDoesNotExistWithinCustomer;
                    }
                }
            }

            if (!string.IsNullOrEmpty(customerUser.CustomerUserId) ||
                !string.IsNullOrEmpty(customerUser.NationalProviderIdentificator))
            {
                var customerUsers =
                    (await GetCustomerUsers(customerUser.CustomerId)).Where(cu => cu.Id != customerUser.Id).ToList();

                if (customerUsers.Any(cu => cu.CustomerUserId == customerUser.CustomerUserId))
                {
                    if (result.Error.HasValue)
                    {
                        result.Error |= CreateUpdateCustomerUserErrorState.CustomerUserIdAlreadyExists;
                    }
                    else
                    {
                        result.Error = CreateUpdateCustomerUserErrorState.CustomerUserIdAlreadyExists;
                    }
                }

                if (
                    customerUsers.Any(
                        cu => cu.NationalProviderIdentificator == customerUser.NationalProviderIdentificator))
                {
                    if (result.Error.HasValue)
                    {
                        result.Error |= CreateUpdateCustomerUserErrorState.NPIAlreadyExists;
                    }
                    else
                    {
                        result.Error = CreateUpdateCustomerUserErrorState.NPIAlreadyExists;
                    }
                }
            }

            if (result.IsValid)
            {
                // Updates user's email in token service
                var updateRequest = new UpdatePrincipalModel
                {
                    Username  = customerUser.Email,
                    FirstName = customerUser.FirstName,
                    LastName  = customerUser.LastName
                };

                await
                tokenDataProvider.UpdatePrincipals(Guid.Parse(existingCustomerUser.TokenServiceUserId),
                                                   updateRequest);

                existingCustomerUser.IsEnabled = customerUser.IsEnabled;
                existingCustomerUser.FirstName = customerUser.FirstName;
                existingCustomerUser.LastName  = customerUser.LastName;
                existingCustomerUser.Email     = customerUser.Email;
                existingCustomerUser.Phone     = customerUser.Phone;
                existingCustomerUser.State     = customerUser.State;
                existingCustomerUser.City      = customerUser.City;
                existingCustomerUser.Address1  = customerUser.Address1;
                existingCustomerUser.Address2  = customerUser.Address2;
                existingCustomerUser.Address3  = customerUser.Address3;
                existingCustomerUser.ZipCode   = customerUser.ZipCode;
                existingCustomerUser.NationalProviderIdentificator =
                    customerUser.NationalProviderIdentificator;
                existingCustomerUser.CustomerUserId = customerUser.CustomerUserId;

                await unitOfWork.SaveAsync();

                result.User = existingCustomerUser;

                var userSites = customerUser.CustomerUserSites != null
                    ? customerUser.CustomerUserSites.Select(s => s.SiteId).ToList()
                    : new List <Guid>();

                await SetSites(existingCustomerUser.Id, userSites);

                if (customerUser.CustomerUserRoleId.HasValue)
                {
                    await SetCustomerUserRole(existingCustomerUser.Id, customerUser.CustomerUserRoleId.Value);
                }

                var customerUserRole = await GetCustomerUserPermissions(existingCustomerUser.Id);

                await usersService.SetUserGroupsByPermissions(customerUserRole.Permissions, existingCustomerUser);
            }

            return(result);
        }