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
- CqlWriter.cs
- BaseConfigurationRecord.cs
- RijndaelManagedTransform.cs
- HttpDictionary.cs
- CodeCastExpression.cs
- AnimationException.cs
- ManualWorkflowSchedulerService.cs
- VariantWrapper.cs
- DSACryptoServiceProvider.cs
- TreeNodeStyle.cs
- DashStyle.cs
- CubicEase.cs
- HuffCodec.cs
- FormsAuthenticationModule.cs
- GACMembershipCondition.cs
- GroupJoinQueryOperator.cs
- DiscreteKeyFrames.cs
- DbDataAdapter.cs
- BindingExpressionUncommonField.cs
- PropertyItem.cs
- EmptyEnumerator.cs
- XhtmlBasicValidatorAdapter.cs
- PropertyAccessVisitor.cs
- ButtonColumn.cs
- ObsoleteAttribute.cs
- XmlMapping.cs
- Pkcs7Recipient.cs
- TreeViewImageIndexConverter.cs
- ElementProxy.cs
- StatusStrip.cs
- WsatTransactionFormatter.cs
- UIElementAutomationPeer.cs
- EncoderExceptionFallback.cs
- FunctionGenerator.cs
- InvalidComObjectException.cs
- SoapCommonClasses.cs
- PropertyEmitter.cs
- CommandCollectionEditor.cs
- ProvideValueServiceProvider.cs
- ConnectionsZone.cs
- handlecollector.cs
- WindowsIPAddress.cs
- ClientWindowsAuthenticationMembershipProvider.cs
- SoapAttributeOverrides.cs
- InlineUIContainer.cs
- OptimisticConcurrencyException.cs
- ContainerAction.cs
- TemplateBindingExtensionConverter.cs
- WebBrowserPermission.cs
- ValueSerializer.cs
- TextTreeTextNode.cs
- EdmEntityTypeAttribute.cs
- WindowShowOrOpenTracker.cs
- FigureParaClient.cs
- ChannelSinkStacks.cs
- SmtpTransport.cs
- GridToolTip.cs
- ClusterSafeNativeMethods.cs
- CategoryNameCollection.cs
- DataTable.cs
- XMLSchema.cs
- InputScopeAttribute.cs
- UpdatePanel.cs
- ModelPerspective.cs
- MultiPropertyDescriptorGridEntry.cs
- CodeStatement.cs
- XhtmlBasicTextBoxAdapter.cs
- SapiRecoContext.cs
- TypeConverterAttribute.cs
- TextReturnReader.cs
- MultiTrigger.cs
- IPipelineRuntime.cs
- SspiSecurityToken.cs
- CrossSiteScriptingValidation.cs
- OleDbReferenceCollection.cs
- DataGridViewCheckBoxColumn.cs
- LocalFileSettingsProvider.cs
- StringDictionaryCodeDomSerializer.cs
- DataServices.cs
- WorkflowOwnershipException.cs
- mediaeventargs.cs
- Set.cs
- MaskDesignerDialog.cs
- RemotingSurrogateSelector.cs
- WorkerRequest.cs
- sapiproxy.cs
- XpsS0ValidatingLoader.cs
- AssociationType.cs
- GenericTextProperties.cs
- Keyboard.cs
- FormClosingEvent.cs
- PointAnimationUsingKeyFrames.cs
- StorageRoot.cs
- FastEncoder.cs
- VirtualizedContainerService.cs
- NotifyParentPropertyAttribute.cs
- QilReplaceVisitor.cs
- Stacktrace.cs
- UserControl.cs
- MonitoringDescriptionAttribute.cs