/// <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); }