public async Task <IActionResult> Update([FromBody] ProviderUserUpdateModel model) { if (!ModelState.IsValid) { return(BadModelResponse()); } return(Ok(await _providerUserManager.UpdateUserRoles(model))); }
/// <summary> /// Update provider user role /// </summary> /// <param name="model">Provider user update model</param> /// <returns>Ok</returns> public async Task <ApiOkResult> UpdateUserRoles(ProviderUserUpdateModel model) { var currentUser = await GetCurrentUser(); if (!await _providerRepository.ExistsWithOwner(model.ProviderId, currentUser.Id)) { throw new AccessDeniedException(model.ProviderId, typeof(Provider)); } if (model.Roles == null || !model.Roles.Any()) { throw new ModelDamagedException("Roles are required"); } model.Roles = model.Roles.Select(x => x.ToUpper()).ToList(); var pShort = await _providerRepository.GetShortById(model.ProviderId); var roles = await _providerRepository.GetRolesById(model.ProviderId); var rolesToUse = roles.Where(x => model.Roles.Contains(x.Name)).ToList(); var targetUser = await _appUserRepository.FindByEmailAsync(model.UserId, new System.Threading.CancellationToken()); if (targetUser == null) { throw new EntityNotFoundException(model.UserId, typeof(AppUser)); } if (!(targetUser.ConnectedProviders?.Any(x => x.ProviderId == model.ProviderId) ?? false)) { throw new EntityNotFoundException(model.ProviderId, typeof(Provider)); } await _appUserRepository.UpdateProviderRoles(targetUser.Id, model.ProviderId, rolesToUse); return(new ApiOkResult()); }