protected override bool TryAssert(OrganizationServiceContext context, Entity entity, CrmEntityRight right, CrmEntityCacheDependencyTrace dependencies, ContentMap map) { var entityName = entity.LogicalName; this.AddDependencies( dependencies, entity, new[] { "adx_webrole", "adx_webrole_contact", "adx_webrole_account", "adx_websiteaccess" }); if (entityName == "adx_weblink") { // Change permission only comes through adx_manageweblinksets on the website. if (right == CrmEntityRight.Change) { return(TryAssertRightProperty(context, "adx_manageweblinksets", dependencies)); } WebLinkNode link; if (map.TryGetValue(entity, out link)) { dependencies.IsCacheable = false; if (link.DisablePageValidation.GetValueOrDefault()) { return(true); } return(link.WebPage == null || link.WebPage.IsReference || (_webPageAccessControlSecurityProvider != null && _webPageAccessControlSecurityProvider.TryAssert(link.WebPage, right, false))); } } WebsiteNode site; if (!map.TryGetValue(_website, out site)) { return(false); } if (entityName == "adx_contentsnippet") { return(right == CrmEntityRight.Read || TryAssertRightProperty(site, rule => rule.ManageContentSnippets)); } if (entityName == "adx_weblinkset") { return(right == CrmEntityRight.Read || TryAssertRightProperty(site, rule => rule.ManageWebLinkSets)); } if (entityName == "adx_sitemarker") { return(right == CrmEntityRight.Read || TryAssertRightProperty(site, rule => rule.ManageSiteMarkers)); } return(false); }
protected virtual bool TestWebPage(OrganizationServiceContext context, Entity entity, CrmEntityRight right, CrmEntityCacheDependencyTrace dependencies) { return((entity != null) && _webPageAccessControlProvider.TryAssert(context, entity, right, dependencies)); }