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
- ServiceOperationParameter.cs
- DateTimeParse.cs
- SchemaExporter.cs
- BehaviorEditorPart.cs
- TemplateAction.cs
- SqlInternalConnectionSmi.cs
- DocumentProperties.cs
- HitTestResult.cs
- TriggerActionCollection.cs
- Hashtable.cs
- HMACSHA384.cs
- BroadcastEventHelper.cs
- Drawing.cs
- GridViewUpdatedEventArgs.cs
- CancelEventArgs.cs
- ButtonDesigner.cs
- SQLDecimalStorage.cs
- HtmlInputControl.cs
- ListControl.cs
- DocumentManager.cs
- SettingsProviderCollection.cs
- CapabilitiesUse.cs
- OperationPickerDialog.designer.cs
- CodePageUtils.cs
- ProfileModule.cs
- TraceListener.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- AsyncWaitHandle.cs
- ActivityBindForm.cs
- Popup.cs
- RectangleHotSpot.cs
- PageAction.cs
- StylusButtonCollection.cs
- DictionaryEntry.cs
- HttpRequest.cs
- InputLanguage.cs
- LingerOption.cs
- EntityDataSourceSelectedEventArgs.cs
- PageMediaSize.cs
- MenuDesigner.cs
- MessageSmuggler.cs
- AlternationConverter.cs
- EventProviderBase.cs
- CounterCreationDataCollection.cs
- RenamedEventArgs.cs
- UriTemplateClientFormatter.cs
- SecurityDescriptor.cs
- COM2PictureConverter.cs
- Native.cs
- ExceptionWrapper.cs
- Sql8ExpressionRewriter.cs
- BindingList.cs
- DataGridViewEditingControlShowingEventArgs.cs
- Pair.cs
- NamespaceTable.cs
- TextCompositionEventArgs.cs
- ScaleTransform.cs
- TaskCanceledException.cs
- StatusBarPanel.cs
- Win32.cs
- StringAttributeCollection.cs
- XmlWrappingReader.cs
- UserControlBuildProvider.cs
- WeakReferenceList.cs
- SafeLibraryHandle.cs
- DoubleConverter.cs
- SqlVisitor.cs
- StrongNameKeyPair.cs
- AssociationEndMember.cs
- WizardPanelChangingEventArgs.cs
- DataBoundControl.cs
- ListViewUpdateEventArgs.cs
- DetailsViewUpdatedEventArgs.cs
- RequestStatusBarUpdateEventArgs.cs
- CommandDevice.cs
- PenThreadWorker.cs
- HwndProxyElementProvider.cs
- SqlConnectionPoolGroupProviderInfo.cs
- GroupQuery.cs
- httpapplicationstate.cs
- MethodBuilder.cs
- Serializer.cs
- CollectionViewGroupInternal.cs
- MetaModel.cs
- PointLight.cs
- SQLBytesStorage.cs
- TemplateBuilder.cs
- CustomValidator.cs
- PersonalizationProviderHelper.cs
- XmlHierarchicalEnumerable.cs
- SafeBuffer.cs
- Item.cs
- ColumnResult.cs
- MDIControlStrip.cs
- PersonalizableTypeEntry.cs
- ProxyGenerationError.cs
- DriveInfo.cs
- DataChangedEventManager.cs
- WmfPlaceableFileHeader.cs
- ObjectAnimationBase.cs