Code:
/ DotNET / DotNET / 8.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
- VBIdentifierDesigner.xaml.cs
- ProcessThread.cs
- BaseParagraph.cs
- PhysicalAddress.cs
- SimpleFieldTemplateFactory.cs
- HwndHostAutomationPeer.cs
- ListGeneralPage.cs
- MailMessage.cs
- WeakReferenceList.cs
- PageContent.cs
- PointHitTestResult.cs
- TiffBitmapEncoder.cs
- HtmlAnchor.cs
- DCSafeHandle.cs
- DependsOnAttribute.cs
- WorkflowMarkupSerializer.cs
- AssemblyBuilder.cs
- DetailsViewRowCollection.cs
- OperatingSystem.cs
- Walker.cs
- _UncName.cs
- EntryIndex.cs
- StandardTransformFactory.cs
- DependencyPropertyDescriptor.cs
- GenericFlowSwitchHelper.cs
- AspNetHostingPermission.cs
- RegexTree.cs
- NativeMethods.cs
- ConfigXmlCDataSection.cs
- TransformGroup.cs
- VerificationException.cs
- InvokeProviderWrapper.cs
- CompilerScopeManager.cs
- DataRecordInternal.cs
- COM2ExtendedUITypeEditor.cs
- _FixedSizeReader.cs
- System.Data_BID.cs
- TextSearch.cs
- FunctionImportMapping.cs
- NameValueCollection.cs
- DocumentPage.cs
- CompressStream.cs
- Atom10FormatterFactory.cs
- LeftCellWrapper.cs
- ControlSerializer.cs
- ObjectNavigationPropertyMapping.cs
- Attachment.cs
- XmlLanguage.cs
- TextTreeDeleteContentUndoUnit.cs
- BlobPersonalizationState.cs
- HttpCacheVaryByContentEncodings.cs
- ScriptResourceDefinition.cs
- MessageSecurityOverHttpElement.cs
- LiteralTextParser.cs
- ActionItem.cs
- EventProviderBase.cs
- DebugView.cs
- SqlCacheDependencySection.cs
- StaticTextPointer.cs
- DataGridClipboardCellContent.cs
- InvalidComObjectException.cs
- XmlSchemas.cs
- FakeModelItemImpl.cs
- GenericEnumerator.cs
- DependencyPropertyChangedEventArgs.cs
- CompilerError.cs
- ZipIORawDataFileBlock.cs
- BasicKeyConstraint.cs
- ContractValidationHelper.cs
- SafeFileMappingHandle.cs
- InteropAutomationProvider.cs
- ChangePassword.cs
- UnknownBitmapEncoder.cs
- SimpleWorkerRequest.cs
- CodeExpressionStatement.cs
- ConfigurationCollectionAttribute.cs
- storagemappingitemcollection.viewdictionary.cs
- WriteTimeStream.cs
- DeviceFilterEditorDialog.cs
- SchemaTableColumn.cs
- WebPartDescriptionCollection.cs
- Vector.cs
- Mutex.cs
- WorkflowOperationFault.cs
- ParameterBuilder.cs
- MouseGestureValueSerializer.cs
- HttpResponseHeader.cs
- ValidationError.cs
- SubpageParagraph.cs
- Journaling.cs
- ComponentChangedEvent.cs
- AssertFilter.cs
- FormsAuthenticationEventArgs.cs
- DropShadowBitmapEffect.cs
- HttpResponseHeader.cs
- EventData.cs
- PermissionToken.cs
- RectAnimationUsingKeyFrames.cs
- BrushConverter.cs
- UserUseLicenseDictionaryLoader.cs