Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / xsp / System / Web / UI / WebParts / PersonalizationProvider.cs / 3 / PersonalizationProvider.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.WebControls.WebParts { using System; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Configuration; using System.Configuration.Provider; using System.Security.Permissions; using System.Security.Principal; using System.Web; using System.Web.Configuration; using System.Web.Hosting; using System.Web.Util; ////// The provider used to access the personalization store for WebPart pages. /// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public abstract class PersonalizationProvider : ProviderBase { private const string scopeFieldName = "__WPPS"; private const string sharedScopeFieldValue = "s"; private const string userScopeFieldValue = "u"; private ICollection _supportedUserCapabilities; ////// Initializes an instance of PersonalizationProvider. /// protected PersonalizationProvider() { } ////// The name of the application that this provider should use to store /// and retrieve personalization data from. /// public abstract string ApplicationName { get; set; } ////// protected virtual IList CreateSupportedUserCapabilities() { ArrayList list = new ArrayList(); list.Add(WebPartPersonalization.EnterSharedScopeUserCapability); list.Add(WebPartPersonalization.ModifyStateUserCapability); return list; } ////// public virtual PersonalizationScope DetermineInitialScope(WebPartManager webPartManager, PersonalizationState loadedState) { if (webPartManager == null) { throw new ArgumentNullException("webPartManager"); } Page page = webPartManager.Page; if (page == null) { throw new ArgumentException(SR.GetString(SR.PropertyCannotBeNull, "Page"), "webPartManager"); } HttpRequest request = page.RequestInternal; if (request == null) { throw new ArgumentException(SR.GetString(SR.PropertyCannotBeNull, "Page.Request"), "webPartManager"); } PersonalizationScope scope = webPartManager.Personalization.InitialScope; IPrincipal user = null; if (request.IsAuthenticated) { user = page.User; } if (user == null) { // if no user has been authenticated, then just load all user data scope = PersonalizationScope.Shared; } else { if (page.IsPostBack) { string postedMode = page.Request[scopeFieldName]; if (postedMode == sharedScopeFieldValue) { scope = PersonalizationScope.Shared; } else if (postedMode == userScopeFieldValue) { scope = PersonalizationScope.User; } } else if ((page.PreviousPage != null) && (page.PreviousPage.IsCrossPagePostBack == false)) { WebPartManager previousWebPartManager = WebPartManager.GetCurrentWebPartManager(page.PreviousPage); if (previousWebPartManager != null) { // Note that we scope = previousWebPartManager.Personalization.Scope; } } // Special-case Web Part Export so it executes in the same security context as the page itself ( else if (page.IsExportingWebPart) { scope = (page.IsExportingWebPartShared ? PersonalizationScope.Shared : PersonalizationScope.User); } if ((scope == PersonalizationScope.Shared) && (webPartManager.Personalization.CanEnterSharedScope == false)) { scope = PersonalizationScope.User; } } string fieldValue = (scope == PersonalizationScope.Shared) ? sharedScopeFieldValue : userScopeFieldValue; page.ClientScript.RegisterHiddenField(scopeFieldName, fieldValue); return scope; } ////// public virtual IDictionary DetermineUserCapabilities(WebPartManager webPartManager) { if (webPartManager == null) { throw new ArgumentNullException("webPartManager"); } Page page = webPartManager.Page; if (page == null) { throw new ArgumentException(SR.GetString(SR.PropertyCannotBeNull, "Page"), "webPartManager"); } HttpRequest request = page.RequestInternal; if (request == null) { throw new ArgumentException(SR.GetString(SR.PropertyCannotBeNull, "Page.Request"), "webPartManager"); } IPrincipal user = null; if (request.IsAuthenticated) { user = page.User; } if (user != null) { if (_supportedUserCapabilities == null) { _supportedUserCapabilities = CreateSupportedUserCapabilities(); } if ((_supportedUserCapabilities != null) && (_supportedUserCapabilities.Count != 0)) { WebPartsSection configSection = RuntimeConfig.GetConfig().WebParts; if (configSection != null) { WebPartsPersonalizationAuthorization authConfig = configSection.Personalization.Authorization; if (authConfig != null) { IDictionary capabilities = new HybridDictionary(); foreach (WebPartUserCapability capability in _supportedUserCapabilities) { if (authConfig.IsUserAllowed(user, capability.Name)) { capabilities[capability] = capability; } } return capabilities; } } } } return new HybridDictionary(); } public abstract PersonalizationStateInfoCollection FindState(PersonalizationScope scope, PersonalizationStateQuery query, int pageIndex, int pageSize, out int totalRecords); public abstract int GetCountOfState(PersonalizationScope scope, PersonalizationStateQuery query); ////// private void GetParameters(WebPartManager webPartManager, out string path, out string userName) { if (webPartManager == null) { throw new ArgumentNullException("webPartManager"); } Page page = webPartManager.Page; if (page == null) { throw new ArgumentException(SR.GetString(SR.PropertyCannotBeNull, "Page"), "webPartManager"); } HttpRequest request = page.RequestInternal; if (request == null) { throw new ArgumentException(SR.GetString(SR.PropertyCannotBeNull, "Page.Request"), "webPartManager"); } path = request.AppRelativeCurrentExecutionFilePath; userName = null; if ((webPartManager.Personalization.Scope == PersonalizationScope.User) && page.Request.IsAuthenticated) { userName = page.User.Identity.Name; } } ////// Loads the data from the data store for the specified path and user. /// If only shared data is to be loaded, userName is null or empty. /// protected abstract void LoadPersonalizationBlobs(WebPartManager webPartManager, string path, string userName, ref byte[] sharedDataBlob, ref byte[] userDataBlob); ////// Allows the provider to load personalization data. The specified /// WebPartManager is used to access the current page, which can be used /// to retrieve the path and user information. /// public virtual PersonalizationState LoadPersonalizationState(WebPartManager webPartManager, bool ignoreCurrentUser) { if (webPartManager == null) { throw new ArgumentNullException("webPartManager"); } string path; string userName; GetParameters(webPartManager, out path, out userName); if (ignoreCurrentUser) { userName = null; } byte[] sharedDataBlob = null; byte[] userDataBlob = null; LoadPersonalizationBlobs(webPartManager, path, userName, ref sharedDataBlob, ref userDataBlob); BlobPersonalizationState blobState = new BlobPersonalizationState(webPartManager); blobState.LoadDataBlobs(sharedDataBlob, userDataBlob); return blobState; } ////// Removes the data from the data store for the specified path and user. /// If userName is null or empty, the shared data is to be reset. /// protected abstract void ResetPersonalizationBlob(WebPartManager webPartManager, string path, string userName); ////// Allows the provider to reset personalization data. The specified /// WebPartManager is used to access the current page, which can be used /// to retrieve the path and user information. /// public virtual void ResetPersonalizationState(WebPartManager webPartManager) { if (webPartManager == null) { throw new ArgumentNullException("webPartManager"); } string path; string userName; GetParameters(webPartManager, out path, out userName); ResetPersonalizationBlob(webPartManager, path, userName); } public abstract int ResetState(PersonalizationScope scope, string[] paths, string[] usernames); public abstract int ResetUserState(string path, DateTime userInactiveSinceDate); ////// Saves the data into the data store for the specified path and user. /// If only shared data is to be saved, userName is null or empty. /// protected abstract void SavePersonalizationBlob(WebPartManager webPartManager, string path, string userName, byte[] dataBlob); ////// Allows the provider to save personalization data. The specified information /// contains a reference to the WebPartManager, which is used to access the /// current Page, and its path and user information. /// public virtual void SavePersonalizationState(PersonalizationState state) { if (state == null) { throw new ArgumentNullException("state"); } BlobPersonalizationState blobState = state as BlobPersonalizationState; if (blobState == null) { throw new ArgumentException(SR.GetString(SR.PersonalizationProvider_WrongType), "state"); } WebPartManager webPartManager = blobState.WebPartManager; string path; string userName; GetParameters(webPartManager, out path, out userName); byte[] dataBlob = null; bool reset = blobState.IsEmpty; if (reset == false) { dataBlob = blobState.SaveDataBlob(); reset = (dataBlob == null) || (dataBlob.Length == 0); } if (reset) { ResetPersonalizationBlob(webPartManager, path, userName); } else { SavePersonalizationBlob(webPartManager, path, userName, dataBlob); } } } } // 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
- WebPartTracker.cs
- DbInsertCommandTree.cs
- BaseTemplateParser.cs
- SqlRemoveConstantOrderBy.cs
- Win32.cs
- ISessionStateStore.cs
- LabelLiteral.cs
- UshortList2.cs
- HitTestWithPointDrawingContextWalker.cs
- IDataContractSurrogate.cs
- MailHeaderInfo.cs
- HtmlTextArea.cs
- PrimarySelectionAdorner.cs
- ControlAdapter.cs
- UriSection.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- XmlSerializerFactory.cs
- DBAsyncResult.cs
- NotifyIcon.cs
- UTF7Encoding.cs
- StylusSystemGestureEventArgs.cs
- DataServiceOperationContext.cs
- Models.cs
- SizeAnimationClockResource.cs
- AppearanceEditorPart.cs
- Style.cs
- RectangleHotSpot.cs
- BufferedGraphics.cs
- QilXmlWriter.cs
- SqlCacheDependency.cs
- AudioFormatConverter.cs
- HttpConfigurationSystem.cs
- BufferAllocator.cs
- DbResourceAllocator.cs
- AnnotationAuthorChangedEventArgs.cs
- DesignerTextBoxAdapter.cs
- GeometryModel3D.cs
- RemoteHelper.cs
- RecognizeCompletedEventArgs.cs
- streamingZipPartStream.cs
- TabItem.cs
- ArraySortHelper.cs
- Size3DValueSerializer.cs
- GenericTypeParameterBuilder.cs
- BulletChrome.cs
- RemoteAsymmetricSignatureFormatter.cs
- SafeProcessHandle.cs
- SoapSchemaExporter.cs
- UnknownWrapper.cs
- basemetadatamappingvisitor.cs
- TdsValueSetter.cs
- EntityParameter.cs
- NavigationProgressEventArgs.cs
- RequestQueryParser.cs
- CollectionEditorDialog.cs
- FlatButtonAppearance.cs
- SqlXmlStorage.cs
- ConcatQueryOperator.cs
- EntityCollectionChangedParams.cs
- WebEventTraceProvider.cs
- GZipStream.cs
- CharKeyFrameCollection.cs
- CryptoConfig.cs
- EventLogPermissionEntryCollection.cs
- ObjectListCommandEventArgs.cs
- XmlParserContext.cs
- PartitionerQueryOperator.cs
- ToolBarButtonClickEvent.cs
- InternalConfigSettingsFactory.cs
- XmlElementAttribute.cs
- Calendar.cs
- altserialization.cs
- DynamicActivity.cs
- ReflectionTypeLoadException.cs
- DropSource.cs
- HttpHandlerActionCollection.cs
- XmlImplementation.cs
- NavigationWindow.cs
- ButtonStandardAdapter.cs
- BaseTemplateParser.cs
- SelectedGridItemChangedEvent.cs
- OneWayBindingElement.cs
- SuppressMergeCheckAttribute.cs
- ProfileSettingsCollection.cs
- GlyphShapingProperties.cs
- Command.cs
- CorruptingExceptionCommon.cs
- StoreItemCollection.Loader.cs
- HtmlInputText.cs
- ACE.cs
- HtmlMeta.cs
- TextParaLineResult.cs
- TitleStyle.cs
- FixUp.cs
- WebSysDescriptionAttribute.cs
- Trace.cs
- OrderedHashRepartitionEnumerator.cs
- PtsCache.cs
- RightsManagementEncryptedStream.cs
- SafeBitVector32.cs