Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / ndp / fx / src / xsp / System / Web / UI / WebControls / LoginView.cs / 3 / LoginView.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls { using System.Collections; using System.ComponentModel; using System.Security.Permissions; using System.Security.Principal; using System.Web.Security; using System.Web.UI; ////// Renders exactly one of its templates, chosen by whether a user is logged in /// and the roles that contain the user. /// [ Bindable(false), ParseChildren(true), PersistChildren(false), Designer("System.Web.UI.Design.WebControls.LoginViewDesigner," + AssemblyRef.SystemDesign), DefaultProperty("CurrentView"), DefaultEvent("ViewChanged"), Themeable(true), ] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class LoginView : Control, INamingContainer { private RoleGroupCollection _roleGroups; private ITemplate _loggedInTemplate; private ITemplate _anonymousTemplate; private int _templateIndex; private const int anonymousTemplateIndex = 0; private const int loggedInTemplateIndex = 1; private const int roleGroupStartingIndex = 2; private static readonly object EventViewChanging = new object(); private static readonly object EventViewChanged = new object(); ////// Template shown when no user is logged in. /// [ Browsable(false), DefaultValue(null), PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(LoginView)), ] public virtual ITemplate AnonymousTemplate { get { return _anonymousTemplate; } set { _anonymousTemplate = value; } } [ Browsable(true), ] public override bool EnableTheming { get { return base.EnableTheming; } set { base.EnableTheming = value; } } [ Browsable(true), ] public override string SkinID { get { return base.SkinID; } set { base.SkinID = value; } } ////// Copied from CompositeControl. This control does not extend CompositeControl because it should not be a WebControl. /// public override ControlCollection Controls { get { EnsureChildControls(); return base.Controls; } } ////// Copied from CompositeControl. This control does not extend CompositeControl because it should not be a WebControl. /// Does not call Base.DataBind(), since we need to call EnsureChildControls() between /// OnDataBinding() and DataBindChildren(). /// public override void DataBind() { // Do our own databinding OnDataBinding(EventArgs.Empty); EnsureChildControls(); // Do all of our children's databinding DataBindChildren(); } ////// Template shown when a user is logged in, but the user is not in any role associated with a template. /// [ Browsable(false), DefaultValue(null), PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(LoginView)), ] public virtual ITemplate LoggedInTemplate { get { return _loggedInTemplate; } set { _loggedInTemplate = value; } } ////// Maps groups of roles to templates. /// [ WebCategory("Behavior"), MergableProperty(false), Themeable(false), Filterable(false), PersistenceMode(PersistenceMode.InnerProperty), WebSysDescription(SR.LoginView_RoleGroups) ] public virtual RoleGroupCollection RoleGroups { get { if (_roleGroups == null) { _roleGroups = new RoleGroupCollection(); } return _roleGroups; } } ////// Index of the template rendered on the previous page load. Saved in ControlState. /// 0: AnonymousTemplate /// 1: LoggedInTemplate /// >=2: RoleGroup template with index n-2 /// private int TemplateIndex { get { return _templateIndex; } set { if (value != TemplateIndex) { OnViewChanging(EventArgs.Empty); _templateIndex = value; ChildControlsCreated = false; OnViewChanged(EventArgs.Empty); } } } ////// Raised after the view is changed. /// [ WebCategory("Action"), WebSysDescription(SR.LoginView_ViewChanged) ] public event EventHandler ViewChanged { add { Events.AddHandler(EventViewChanged, value); } remove { Events.RemoveHandler(EventViewChanged, value); } } ////// Raised before the view is changed. Not cancellable, because the view is changed /// when the logged-in user changes, and it wouldn't make sense to cancel this. /// [ WebCategory("Action"), WebSysDescription(SR.LoginView_ViewChanging) ] public event EventHandler ViewChanging { add { Events.AddHandler(EventViewChanging, value); } remove { Events.RemoveHandler(EventViewChanging, value); } } ////// Instantiate the appropriate template. /// protected internal override void CreateChildControls() { Controls.Clear(); // For the first request, set _templateIndex now, so the correct template is // instantiated and we do not raise the ViewChanging/ViewChanged events. Page page = Page; if (page != null && !page.IsPostBack && !DesignMode) { _templateIndex = GetTemplateIndex(); } int templateIndex = TemplateIndex; ITemplate template = null; switch (templateIndex) { case anonymousTemplateIndex: template = AnonymousTemplate; break; case loggedInTemplateIndex: template = LoggedInTemplate; break; default: int roleGroupIndex = templateIndex - roleGroupStartingIndex; RoleGroupCollection roleGroups = RoleGroups; if (0 <= roleGroupIndex && roleGroupIndex < roleGroups.Count) { template = roleGroups[roleGroupIndex].ContentTemplate; } break; } if (template != null) { Control templateContainer = new Control(); template.InstantiateIn(templateContainer); Controls.Add(templateContainer); } } [ EditorBrowsable(EditorBrowsableState.Never), ] public override void Focus() { throw new NotSupportedException(SR.GetString(SR.NoFocusSupport, this.GetType().Name)); } ////// Loads the control state for those properties that should persist across postbacks /// even when EnableViewState=false. /// protected internal override void LoadControlState(object savedState) { if (savedState != null) { Pair state = (Pair)savedState; if (state.First != null) { base.LoadControlState(state.First); } if (state.Second != null) { _templateIndex = (int)state.Second; } } } protected internal override void OnInit(EventArgs e) { base.OnInit(e); if (Page != null) { Page.RegisterRequiresControlState(this); } } ////// Sets the TemplateIndex based on the current user. /// protected internal override void OnPreRender(EventArgs e) { base.OnPreRender(e); TemplateIndex = GetTemplateIndex(); // This is called in Control.PreRenderRecursiveInteral, but we need to call it again // since we may have changed the TemplateIndex EnsureChildControls(); } ////// Raises the ViewChanged event. /// protected virtual void OnViewChanged(EventArgs e) { EventHandler handler = (EventHandler)Events[EventViewChanged]; if (handler != null) { handler(this, e); } } ////// Raises the ViewChanging event. /// protected virtual void OnViewChanging(EventArgs e) { EventHandler handler = (EventHandler)Events[EventViewChanging]; if (handler != null) { handler(this, e); } } protected internal override void Render(HtmlTextWriter writer) { EnsureChildControls(); base.Render(writer); } ////// Saves the control state for those properties that should persist across postbacks /// even when EnableViewState=false. /// protected internal override object SaveControlState() { object baseState = base.SaveControlState(); if (baseState != null || _templateIndex != 0) { object templateIndexState = null; if (_templateIndex != 0) { templateIndexState = _templateIndex; } return new Pair(baseState, templateIndexState); } return null; } ////// Allows the designer to set the TemplateIndex, so the different templates can be shown in the designer. /// [SecurityPermission(SecurityAction.Demand, Unrestricted = true)] protected override void SetDesignModeState(IDictionary data) { if (data != null) { object o = data["TemplateIndex"]; if (o != null) { TemplateIndex = (int)o; // Note: we always recreate the child controls in the designer to correctly handle the case of // the currently selected role group being deleted. This is necessary because the // setter for TemplateIndex won't recreate the controls if the TemplateIndex is unchanged, // which is the case when deleting all but the last role group. [Fix for Bug 148406] ChildControlsCreated = false; } } } private int GetTemplateIndex() { if (!DesignMode && Page != null && Page.Request.IsAuthenticated) { IPrincipal user = LoginUtil.GetUser(this); int roleGroupIndex = -1; // Unlikely but possible for Page.Request.IsAuthenticated to be true and // user to be null. if (user != null) { roleGroupIndex = RoleGroups.GetMatchingRoleGroupInternal(user); } if (roleGroupIndex >= 0) { return roleGroupIndex + roleGroupStartingIndex; } else { return loggedInTemplateIndex; } } else { return anonymousTemplateIndex; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls { using System.Collections; using System.ComponentModel; using System.Security.Permissions; using System.Security.Principal; using System.Web.Security; using System.Web.UI; ////// Renders exactly one of its templates, chosen by whether a user is logged in /// and the roles that contain the user. /// [ Bindable(false), ParseChildren(true), PersistChildren(false), Designer("System.Web.UI.Design.WebControls.LoginViewDesigner," + AssemblyRef.SystemDesign), DefaultProperty("CurrentView"), DefaultEvent("ViewChanged"), Themeable(true), ] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class LoginView : Control, INamingContainer { private RoleGroupCollection _roleGroups; private ITemplate _loggedInTemplate; private ITemplate _anonymousTemplate; private int _templateIndex; private const int anonymousTemplateIndex = 0; private const int loggedInTemplateIndex = 1; private const int roleGroupStartingIndex = 2; private static readonly object EventViewChanging = new object(); private static readonly object EventViewChanged = new object(); ////// Template shown when no user is logged in. /// [ Browsable(false), DefaultValue(null), PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(LoginView)), ] public virtual ITemplate AnonymousTemplate { get { return _anonymousTemplate; } set { _anonymousTemplate = value; } } [ Browsable(true), ] public override bool EnableTheming { get { return base.EnableTheming; } set { base.EnableTheming = value; } } [ Browsable(true), ] public override string SkinID { get { return base.SkinID; } set { base.SkinID = value; } } ////// Copied from CompositeControl. This control does not extend CompositeControl because it should not be a WebControl. /// public override ControlCollection Controls { get { EnsureChildControls(); return base.Controls; } } ////// Copied from CompositeControl. This control does not extend CompositeControl because it should not be a WebControl. /// Does not call Base.DataBind(), since we need to call EnsureChildControls() between /// OnDataBinding() and DataBindChildren(). /// public override void DataBind() { // Do our own databinding OnDataBinding(EventArgs.Empty); EnsureChildControls(); // Do all of our children's databinding DataBindChildren(); } ////// Template shown when a user is logged in, but the user is not in any role associated with a template. /// [ Browsable(false), DefaultValue(null), PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(LoginView)), ] public virtual ITemplate LoggedInTemplate { get { return _loggedInTemplate; } set { _loggedInTemplate = value; } } ////// Maps groups of roles to templates. /// [ WebCategory("Behavior"), MergableProperty(false), Themeable(false), Filterable(false), PersistenceMode(PersistenceMode.InnerProperty), WebSysDescription(SR.LoginView_RoleGroups) ] public virtual RoleGroupCollection RoleGroups { get { if (_roleGroups == null) { _roleGroups = new RoleGroupCollection(); } return _roleGroups; } } ////// Index of the template rendered on the previous page load. Saved in ControlState. /// 0: AnonymousTemplate /// 1: LoggedInTemplate /// >=2: RoleGroup template with index n-2 /// private int TemplateIndex { get { return _templateIndex; } set { if (value != TemplateIndex) { OnViewChanging(EventArgs.Empty); _templateIndex = value; ChildControlsCreated = false; OnViewChanged(EventArgs.Empty); } } } ////// Raised after the view is changed. /// [ WebCategory("Action"), WebSysDescription(SR.LoginView_ViewChanged) ] public event EventHandler ViewChanged { add { Events.AddHandler(EventViewChanged, value); } remove { Events.RemoveHandler(EventViewChanged, value); } } ////// Raised before the view is changed. Not cancellable, because the view is changed /// when the logged-in user changes, and it wouldn't make sense to cancel this. /// [ WebCategory("Action"), WebSysDescription(SR.LoginView_ViewChanging) ] public event EventHandler ViewChanging { add { Events.AddHandler(EventViewChanging, value); } remove { Events.RemoveHandler(EventViewChanging, value); } } ////// Instantiate the appropriate template. /// protected internal override void CreateChildControls() { Controls.Clear(); // For the first request, set _templateIndex now, so the correct template is // instantiated and we do not raise the ViewChanging/ViewChanged events. Page page = Page; if (page != null && !page.IsPostBack && !DesignMode) { _templateIndex = GetTemplateIndex(); } int templateIndex = TemplateIndex; ITemplate template = null; switch (templateIndex) { case anonymousTemplateIndex: template = AnonymousTemplate; break; case loggedInTemplateIndex: template = LoggedInTemplate; break; default: int roleGroupIndex = templateIndex - roleGroupStartingIndex; RoleGroupCollection roleGroups = RoleGroups; if (0 <= roleGroupIndex && roleGroupIndex < roleGroups.Count) { template = roleGroups[roleGroupIndex].ContentTemplate; } break; } if (template != null) { Control templateContainer = new Control(); template.InstantiateIn(templateContainer); Controls.Add(templateContainer); } } [ EditorBrowsable(EditorBrowsableState.Never), ] public override void Focus() { throw new NotSupportedException(SR.GetString(SR.NoFocusSupport, this.GetType().Name)); } ////// Loads the control state for those properties that should persist across postbacks /// even when EnableViewState=false. /// protected internal override void LoadControlState(object savedState) { if (savedState != null) { Pair state = (Pair)savedState; if (state.First != null) { base.LoadControlState(state.First); } if (state.Second != null) { _templateIndex = (int)state.Second; } } } protected internal override void OnInit(EventArgs e) { base.OnInit(e); if (Page != null) { Page.RegisterRequiresControlState(this); } } ////// Sets the TemplateIndex based on the current user. /// protected internal override void OnPreRender(EventArgs e) { base.OnPreRender(e); TemplateIndex = GetTemplateIndex(); // This is called in Control.PreRenderRecursiveInteral, but we need to call it again // since we may have changed the TemplateIndex EnsureChildControls(); } ////// Raises the ViewChanged event. /// protected virtual void OnViewChanged(EventArgs e) { EventHandler handler = (EventHandler)Events[EventViewChanged]; if (handler != null) { handler(this, e); } } ////// Raises the ViewChanging event. /// protected virtual void OnViewChanging(EventArgs e) { EventHandler handler = (EventHandler)Events[EventViewChanging]; if (handler != null) { handler(this, e); } } protected internal override void Render(HtmlTextWriter writer) { EnsureChildControls(); base.Render(writer); } ////// Saves the control state for those properties that should persist across postbacks /// even when EnableViewState=false. /// protected internal override object SaveControlState() { object baseState = base.SaveControlState(); if (baseState != null || _templateIndex != 0) { object templateIndexState = null; if (_templateIndex != 0) { templateIndexState = _templateIndex; } return new Pair(baseState, templateIndexState); } return null; } ////// Allows the designer to set the TemplateIndex, so the different templates can be shown in the designer. /// [SecurityPermission(SecurityAction.Demand, Unrestricted = true)] protected override void SetDesignModeState(IDictionary data) { if (data != null) { object o = data["TemplateIndex"]; if (o != null) { TemplateIndex = (int)o; // Note: we always recreate the child controls in the designer to correctly handle the case of // the currently selected role group being deleted. This is necessary because the // setter for TemplateIndex won't recreate the controls if the TemplateIndex is unchanged, // which is the case when deleting all but the last role group. [Fix for Bug 148406] ChildControlsCreated = false; } } } private int GetTemplateIndex() { if (!DesignMode && Page != null && Page.Request.IsAuthenticated) { IPrincipal user = LoginUtil.GetUser(this); int roleGroupIndex = -1; // Unlikely but possible for Page.Request.IsAuthenticated to be true and // user to be null. if (user != null) { roleGroupIndex = RoleGroups.GetMatchingRoleGroupInternal(user); } if (roleGroupIndex >= 0) { return roleGroupIndex + roleGroupStartingIndex; } else { return loggedInTemplateIndex; } } else { return anonymousTemplateIndex; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ExpressionCopier.cs
- ByteBufferPool.cs
- ObjectDataSource.cs
- UnmanagedMemoryStream.cs
- EventManager.cs
- NativeMethodsOther.cs
- DataControlPagerLinkButton.cs
- LocalizableAttribute.cs
- ToolStripDropDownClosedEventArgs.cs
- Accessible.cs
- WorkflowPersistenceService.cs
- SymDocumentType.cs
- DescendantBaseQuery.cs
- TreeNodeStyle.cs
- AndMessageFilter.cs
- ExclusiveTcpTransportManager.cs
- StrongTypingException.cs
- EntityStoreSchemaFilterEntry.cs
- XmlBindingWorker.cs
- ToolStripPanelRow.cs
- OleDbCommand.cs
- ProtectedProviderSettings.cs
- CodeLabeledStatement.cs
- AutoScrollHelper.cs
- ResourceSetExpression.cs
- MemberJoinTreeNode.cs
- InlinedAggregationOperator.cs
- VerticalAlignConverter.cs
- ToolZone.cs
- SafePEFileHandle.cs
- COM2PropertyDescriptor.cs
- EncoderFallback.cs
- XmlDocumentType.cs
- OleDbMetaDataFactory.cs
- DataTableExtensions.cs
- DataPointer.cs
- pingexception.cs
- CompressStream.cs
- RegexCharClass.cs
- SplineKeyFrames.cs
- FrameworkReadOnlyPropertyMetadata.cs
- BindableAttribute.cs
- SQLConvert.cs
- Triplet.cs
- CodeThrowExceptionStatement.cs
- Document.cs
- ServiceOperationInfoTypeConverter.cs
- PersistChildrenAttribute.cs
- LinearGradientBrush.cs
- PLINQETWProvider.cs
- EditorZone.cs
- EventSinkHelperWriter.cs
- ObfuscateAssemblyAttribute.cs
- ConfigurationSection.cs
- SortedList.cs
- EventTrigger.cs
- UrlEncodedParameterWriter.cs
- SQLResource.cs
- HitTestFilterBehavior.cs
- SmtpReplyReaderFactory.cs
- UrlParameterWriter.cs
- XPathSelfQuery.cs
- ProviderException.cs
- UrlPath.cs
- InstanceDescriptor.cs
- UrlMapping.cs
- CustomAssemblyResolver.cs
- PixelFormats.cs
- SqlTrackingService.cs
- CmsUtils.cs
- IncrementalHitTester.cs
- TextBox.cs
- UnsafeNativeMethods.cs
- XmlCharacterData.cs
- DrawingCollection.cs
- RuntimeArgumentHandle.cs
- ContentTextAutomationPeer.cs
- XpsResource.cs
- DataControlFieldTypeEditor.cs
- HostedHttpTransportManager.cs
- Slider.cs
- FilteredDataSetHelper.cs
- DockPattern.cs
- IFlowDocumentViewer.cs
- SerialPinChanges.cs
- CustomErrorsSection.cs
- ToolBarOverflowPanel.cs
- ContentPosition.cs
- QueryMatcher.cs
- OdbcReferenceCollection.cs
- PanelDesigner.cs
- TagPrefixAttribute.cs
- IPPacketInformation.cs
- ProviderException.cs
- SapiRecoContext.cs
- SchemaUtility.cs
- ControlIdConverter.cs
- ExpressionBindingCollection.cs
- XAMLParseException.cs
- DataTableMappingCollection.cs