/// <summary> /// Only ClaimTypeConfig with property ClaimType already set can be updated /// </summary> /// <param name="oldClaimType">Claim type of ClaimTypeConfig object to update</param> /// <param name="newItem">New version of ClaimTypeConfig object</param> public void Update(string oldClaimType, ClaimTypeConfig newItem) { if (String.IsNullOrEmpty(oldClaimType)) { throw new ArgumentNullException("oldClaimType"); } if (newItem == null) { throw new ArgumentNullException("newItem"); } // If SPTrustedLoginProvider is set, additional checks can be done if (SPTrust != null) { // Specific checks if current claim type is identity claim type if (String.Equals(oldClaimType, SPTrust.IdentityClaimTypeInformation.MappedClaimType, StringComparison.InvariantCultureIgnoreCase)) { // We don't allow to change claim type if (!String.Equals(newItem.ClaimType, oldClaimType, StringComparison.InvariantCultureIgnoreCase)) { throw new InvalidOperationException($"Claim type cannot be changed because current item is the configuration of the identity claim type"); } // EntityType must be User if (newItem.EntityType != DirectoryObjectType.User) { throw new InvalidOperationException($"Identity claim type must be configured with EntityType 'User'"); } } } // Create a temp collection that is a copy of current collection ClaimTypeConfigCollection testUpdateCollection = new ClaimTypeConfigCollection(); foreach (ClaimTypeConfig curCTConfig in innerCol) { testUpdateCollection.Add(curCTConfig.CopyPersistedProperties(), false); } // Update ClaimTypeConfig in testUpdateCollection ClaimTypeConfig ctConfigToUpdate = testUpdateCollection.First(x => String.Equals(x.ClaimType, oldClaimType, StringComparison.InvariantCultureIgnoreCase)); ctConfigToUpdate.SetFromObject(newItem); // Test change in testUpdateCollection by adding all items in a new temp collection ClaimTypeConfigCollection testNewItemCollection = new ClaimTypeConfigCollection(); foreach (ClaimTypeConfig curCTConfig in testUpdateCollection) { // ClaimTypeConfigCollection.Add() may thrown an exception if newItem is not valid for any reason testNewItemCollection.Add(curCTConfig, false); } // No error, current collection can safely be updated innerCol.First(x => String.Equals(x.ClaimType, oldClaimType, StringComparison.InvariantCultureIgnoreCase)).SetFromObject(newItem); }
public ClaimTypeConfigEnumerator(ClaimTypeConfigCollection collection) { _collection = collection; curIndex = -1; curBox = default(ClaimTypeConfig); }