public async Task <bool> Execute(AddResourceSetParameter addResourceSetParameter) { if (addResourceSetParameter == null) { throw new ArgumentNullException(nameof(addResourceSetParameter)); } if (string.IsNullOrWhiteSpace(addResourceSetParameter.PolicyId)) { throw new BaseUmaException(ErrorCodes.InvalidRequestCode, string.Format(ErrorDescriptions.TheParameterNeedsToBeSpecified, Constants.AddResourceSetParameterNames.PolicyId)); } if (addResourceSetParameter.ResourceSets == null || !addResourceSetParameter.ResourceSets.Any()) { throw new BaseUmaException(ErrorCodes.InvalidRequestCode, string.Format(ErrorDescriptions.TheParameterNeedsToBeSpecified, Constants.AddResourceSetParameterNames.ResourceSet)); } _umaServerEventSource.StartAddResourceToAuthorizationPolicy(addResourceSetParameter.PolicyId, string.Join(",", addResourceSetParameter.ResourceSets)); var policy = await _repositoryExceptionHelper.HandleException( string.Format(ErrorDescriptions.TheAuthorizationPolicyCannotBeRetrieved, addResourceSetParameter.PolicyId), () => _policyRepository.Get(addResourceSetParameter.PolicyId)); if (policy == null) { return(false); } foreach (var resourceSetId in addResourceSetParameter.ResourceSets) { var resourceSet = await _repositoryExceptionHelper.HandleException( string.Format(ErrorDescriptions.TheResourceSetCannotBeRetrieved, resourceSetId), () => _resourceSetRepository.Get(resourceSetId)); if (resourceSet == null) { throw new BaseUmaException(ErrorCodes.InvalidResourceSetId, string.Format(ErrorDescriptions.TheResourceSetDoesntExist, resourceSetId)); } } var resourceSetIds = policy.ResourceSetIds.ToList(); resourceSetIds.AddRange(addResourceSetParameter.ResourceSets); policy.ResourceSetIds = resourceSetIds; var result = await _repositoryExceptionHelper.HandleException( ErrorDescriptions.ThePolicyCannotBeUpdated, () => _policyRepository.Update(policy)); _umaServerEventSource.FinishAddResourceToAuthorizationPolicy(addResourceSetParameter.PolicyId, string.Join(",", addResourceSetParameter.ResourceSets)); return(result); }