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);
        }
Beispiel #2
0
 protected virtual bool TestWebPage(OrganizationServiceContext context, Entity entity, CrmEntityRight right, CrmEntityCacheDependencyTrace dependencies)
 {
     return((entity != null) && _webPageAccessControlProvider.TryAssert(context, entity, right, dependencies));
 }