/// <summary> Initializes a new instance of the <see cref="RequestCachingWebsiteAccessPermissionProvider"/> class. </summary>
        /// <param name="underlyingProvider"> The underlying provider. </param>
        /// <param name="website"> The website. </param>
        public RequestCachingWebsiteAccessPermissionProvider(IWebsiteAccessPermissionProvider underlyingProvider, EntityReference website)
        {
            if (underlyingProvider == null)
            {
                throw new ArgumentNullException("underlyingProvider");
            }
            if (website == null)
            {
                throw new ArgumentNullException("website");
            }

            this._underlyingProvider = underlyingProvider;
            this._website            = website;
        }
        protected virtual void AssertRequestEntitySecurity(IPortalContext portal, OrganizationServiceContext serviceContext, Entity entity, ICrmEntitySecurityProvider security, IWebsiteAccessPermissionProvider websiteAccess, CmsEntityRelationshipInfo relationshipInfo)
        {
            if (!entity.ToEntityReference().Equals(portal.Website.ToEntityReference()))
            {
                return;
            }

            var otherEntity = relationshipInfo.IsCollection
                                ? relationshipInfo.ReferencingEntity
                                : relationshipInfo.ReferencedEntity;

            if (string.Equals(otherEntity, "adx_contentsnippet", StringComparison.OrdinalIgnoreCase))
            {
                if (!websiteAccess.TryAssert(serviceContext, WebsiteRight.ManageContentSnippets))
                {
                    throw new CmsEntityServiceException(HttpStatusCode.Forbidden, "Manage Content Snippets permission denied.");
                }

                return;
            }

            if (string.Equals(otherEntity, "adx_sitemarker", StringComparison.OrdinalIgnoreCase))
            {
                if (!websiteAccess.TryAssert(serviceContext, WebsiteRight.ManageSiteMarkers))
                {
                    throw new CmsEntityServiceException(HttpStatusCode.Forbidden, "Manage Site Markers permission denied.");
                }

                return;
            }

            if (string.Equals(otherEntity, "adx_weblinkset", StringComparison.OrdinalIgnoreCase) ||
                string.Equals(otherEntity, "adx_weblink", StringComparison.OrdinalIgnoreCase))
            {
                if (!websiteAccess.TryAssert(serviceContext, WebsiteRight.ManageWebLinkSets))
                {
                    throw new CmsEntityServiceException(HttpStatusCode.Forbidden, "Manage Web Link Sets permission denied.");
                }

                return;
            }

            base.AssertRequestEntitySecurity(portal, serviceContext, entity, security);
        }