Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Security / Policy / FirstMatchCodeGroup.cs / 1 / FirstMatchCodeGroup.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// FirstMatchCodeGroup.cs
//
// Representation for code groups used for the policy mechanism
//
namespace System.Security.Policy {
using System;
using System.Security.Util;
using System.Security;
using System.Collections;
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
sealed public class FirstMatchCodeGroup : CodeGroup
{
internal FirstMatchCodeGroup()
: base()
{
}
public FirstMatchCodeGroup( IMembershipCondition membershipCondition, PolicyStatement policy )
: base( membershipCondition, policy )
{
}
public override PolicyStatement Resolve( Evidence evidence )
{
if (evidence == null)
throw new ArgumentNullException("evidence");
if (this.MembershipCondition.Check( evidence ))
{
PolicyStatement childPolicy = null;
IEnumerator enumerator = this.Children.GetEnumerator();
while (enumerator.MoveNext())
{
childPolicy = ((CodeGroup)enumerator.Current).Resolve( evidence );
// If the child has a policy, we are done.
if (childPolicy != null)
break;
}
PolicyStatement thisPolicy = this.PolicyStatement;
if (thisPolicy == null)
{
return childPolicy;
}
else if (childPolicy != null)
{
// Combine the child and this policy and return it.
PolicyStatement combined = new PolicyStatement();
combined.SetPermissionSetNoCopy( thisPolicy.GetPermissionSetNoCopy().Union( childPolicy.GetPermissionSetNoCopy() ) );
// if both this group and matching child group are exclusive we need to throw an exception
if (((thisPolicy.Attributes & childPolicy.Attributes) & PolicyStatementAttribute.Exclusive) == PolicyStatementAttribute.Exclusive)
throw new PolicyException( Environment.GetResourceString( "Policy_MultipleExclusive" ) );
combined.Attributes = thisPolicy.Attributes | childPolicy.Attributes;
return combined;
}
else
{
// Otherwise we just copy the this policy.
return this.PolicyStatement;
}
}
else
{
return null;
}
}
public override CodeGroup ResolveMatchingCodeGroups( Evidence evidence )
{
if (evidence == null)
throw new ArgumentNullException("evidence");
if (this.MembershipCondition.Check( evidence ))
{
CodeGroup retGroup = this.Copy();
retGroup.Children = new ArrayList();
IEnumerator enumerator = this.Children.GetEnumerator();
while (enumerator.MoveNext())
{
CodeGroup matchingGroups = ((CodeGroup)enumerator.Current).ResolveMatchingCodeGroups( evidence );
// If the child has a policy, we are done.
if (matchingGroups != null)
{
retGroup.AddChild( matchingGroups );
break;
}
}
return retGroup;
}
else
{
return null;
}
}
public override CodeGroup Copy()
{
FirstMatchCodeGroup group = new FirstMatchCodeGroup();
group.MembershipCondition = this.MembershipCondition;
group.PolicyStatement = this.PolicyStatement;
group.Name = this.Name;
group.Description = this.Description;
IEnumerator enumerator = this.Children.GetEnumerator();
while (enumerator.MoveNext())
{
group.AddChild( (CodeGroup)enumerator.Current );
}
return group;
}
public override String MergeLogic
{
get
{
return Environment.GetResourceString( "MergeLogic_FirstMatch" );
}
}
internal override String GetTypeName()
{
return "System.Security.Policy.FirstMatchCodeGroup";
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StylusTip.cs
- XmlProcessingInstruction.cs
- WindowsClientCredential.cs
- VirtualizedItemPattern.cs
- NavigateUrlConverter.cs
- XmlMemberMapping.cs
- UnmanagedMemoryStream.cs
- TypedTableBaseExtensions.cs
- ThreadStartException.cs
- WebPartEditorApplyVerb.cs
- LogAppendAsyncResult.cs
- ParameterCollection.cs
- PreDigestedSignedInfo.cs
- EventEntry.cs
- ProcessHostFactoryHelper.cs
- FilterElement.cs
- TypographyProperties.cs
- AccessDataSource.cs
- ObjectComplexPropertyMapping.cs
- SafeNativeHandle.cs
- _AcceptOverlappedAsyncResult.cs
- EdmTypeAttribute.cs
- ToolStripTextBox.cs
- WebServiceResponse.cs
- Overlapped.cs
- TableCellAutomationPeer.cs
- OdbcCommandBuilder.cs
- DataGridViewRowPrePaintEventArgs.cs
- SymbolEqualComparer.cs
- BitmapSource.cs
- ApplicationSettingsBase.cs
- HMACSHA384.cs
- JsonStringDataContract.cs
- WebControlsSection.cs
- MenuCommand.cs
- XhtmlBasicTextBoxAdapter.cs
- HttpListenerTimeoutManager.cs
- ContentElementAutomationPeer.cs
- RadioButtonRenderer.cs
- PropertyDescriptorComparer.cs
- XamlClipboardData.cs
- Image.cs
- CaseCqlBlock.cs
- ObjectAssociationEndMapping.cs
- FilterableAttribute.cs
- GraphicsContainer.cs
- FilterInvalidBodyAccessException.cs
- WebRequestModulesSection.cs
- DataSourceGeneratorException.cs
- SizeConverter.cs
- LogEntryDeserializer.cs
- MultipartContentParser.cs
- TextEndOfSegment.cs
- Regex.cs
- _Events.cs
- WizardStepBase.cs
- EdmItemError.cs
- Operator.cs
- ScalarType.cs
- OutputCacheSection.cs
- ToggleProviderWrapper.cs
- RowBinding.cs
- ZoneIdentityPermission.cs
- SqlClientWrapperSmiStream.cs
- ListViewInsertedEventArgs.cs
- XmlSignatureProperties.cs
- AccessorTable.cs
- ListViewInsertedEventArgs.cs
- EntityKey.cs
- CodeNamespaceCollection.cs
- _AcceptOverlappedAsyncResult.cs
- BindingElementExtensionElement.cs
- FigureHelper.cs
- WindowsListViewGroupSubsetLink.cs
- RowTypePropertyElement.cs
- IndependentAnimationStorage.cs
- ListMarkerLine.cs
- ByteAnimationBase.cs
- DataGridViewCellStyleChangedEventArgs.cs
- ToolZone.cs
- DispatcherExceptionFilterEventArgs.cs
- PagerSettings.cs
- AutomationEventArgs.cs
- UpWmlPageAdapter.cs
- PromptEventArgs.cs
- WebBrowserDocumentCompletedEventHandler.cs
- TableProviderWrapper.cs
- EditingScopeUndoUnit.cs
- ByteStorage.cs
- HashSetEqualityComparer.cs
- DesignerActionTextItem.cs
- MgmtResManager.cs
- HyperLink.cs
- SecurityException.cs
- EventLogEntryCollection.cs
- PackUriHelper.cs
- SamlSecurityToken.cs
- EventListener.cs
- RichTextBox.cs
- SQLInt64Storage.cs