/// <summary>
        /// Applies both CAL and Product filtering to the existing FetchXML query
        /// </summary>
        /// <param name="right">Current Permission Right</param>
        /// <param name="fetchIn">FetchXML to modify</param>
        public override void TryApplyRecordLevelFiltersToFetch(CrmEntityPermissionRight right, Fetch fetchIn)
        {
            // We are not calling this method anywhere as it's causing performance issues.
            // returning with no operation in case if some other methods calling it in future.
            throw new NotImplementedException();

            // Apply filter only if Entity is "Knowledge Article" and Right is "Read"
            if (!this.IsRightEntityAndPermissionRight(right, fetchIn, this.Config.SourceEntityName, CrmEntityPermissionRight.Read))
            {
                return;
            }
            this.ApplyCategoryFilter(fetchIn);
        }
        /// <summary>
        /// Checks for the current Entity Name and Permission Right to determine additional filtering needed
        /// </summary>
        /// <param name="currentRight">Current Permission Right</param>
        /// <param name="fetchIn">existing FetchXML to determine the entity name</param>
        /// <param name="entityNameToCheck">Entity name to check</param>
        /// <param name="rightToCheck">Permission right to check</param>
        /// <returns>True if it is the correct Entity and Permission</returns>
        protected bool IsRightEntityAndPermissionRight(CrmEntityPermissionRight currentRight, Fetch fetchIn, string entityNameToCheck, CrmEntityPermissionRight rightToCheck)
        {
            var currentEntityName = fetchIn.Entity.Name;

            if (string.IsNullOrWhiteSpace(currentEntityName))
            {
                throw new ApplicationException("Fetch must contain and entity element with a name property value.");
            }

            if (currentEntityName == entityNameToCheck && currentRight == rightToCheck)
            {
                return(true);
            }
            return(false);
        }
示例#3
0
        /// <summary>
        /// Applies the CAL filtering to the existing FetchXML query
        /// </summary>
        /// <param name="right">Current Permission Right</param>
        /// <param name="fetchIn">FetchXML to modify</param>
        public override void TryApplyRecordLevelFiltersToFetch(CrmEntityPermissionRight right, Fetch fetchIn)
        {
            // Apply filter only if Entity is "Knowledge Article" and Right is "Read"
            if (!this.IsRightEntityAndPermissionRight(right, fetchIn, this.Config.SourceEntityName, CrmEntityPermissionRight.Read))
            {
                return;
            }

            // If CAL is not enabled
            if (!this.IsEnabled())
            {
                return;
            }

            // Retrieve CAL IDs
            var userCALIDs = this.RetrieveCurrentUserContentAccessLevels();

            // Inject CAL IDs filter into FetchXML
            this.TryRecordLevelFiltersToFetch(fetchIn, userCALIDs);
        }
示例#4
0
        public override bool TryAssert(OrganizationServiceContext serviceContext, CrmEntityPermissionRight right, Entity entity, EntityMetadata entityMetadata = null, bool readGranted = false)
        {
            ////if (entity.LogicalName == "quote")
            ////{
            ////    return false;
            ////}
            ////return base.TryAssert(context, entity, right);
            //return false;
            //if (!entity.LogicalName.Contains("adx"))
            //{
            //    if (entity.LogicalName.Contains("gsc_sls_prospect"))
            //    {
            //        return true;
            //    }
            //    return false;
            //}
            //return true;

            if (entity.LogicalName == "gsc_sls_prospect")
            {
                return(false);
            }
            return(base.TryAssert(serviceContext, right, entity));
        }
        protected void AddPermissionFilterToFetch(Fetch fetch, EntityListSettings settings, OrganizationServiceContext serviceContext, CrmEntityPermissionRight right)
        {
            if (!settings.EntityPermissionsEnabled)
            {
                return;
            }

            var crmEntityPermissionProvider = new CrmEntityPermissionProvider();

            var result = crmEntityPermissionProvider.TryApplyRecordLevelFiltersToFetch(serviceContext, right, fetch);

            // Apply Content Access Level filtering
            var contentAccessLevelProvider = new ContentAccessLevelProvider();

            contentAccessLevelProvider.TryApplyRecordLevelFiltersToFetch(right, fetch);

            // Apply Product filtering
            var productAccessProvider = new ProductAccessProvider();

            productAccessProvider.TryApplyRecordLevelFiltersToFetch(right, fetch);

            EntityPermissionDenied = !result.GlobalPermissionGranted && !result.PermissionGranted;
        }
示例#6
0
        private static bool AddPermissionFilterToFetch(Fetch fetch, OrganizationServiceContext serviceContext, CrmEntityPermissionRight right)
        {
            var crmEntityPermissionProvider = new CrmEntityPermissionProvider();

            var result = crmEntityPermissionProvider.TryApplyRecordLevelFiltersToFetch(serviceContext, right, fetch);

            // Apply Content Access Level filtering
            var contentAccessLevelProvider = new ContentAccessLevelProvider();

            contentAccessLevelProvider.TryApplyRecordLevelFiltersToFetch(right, fetch);

            // Apply Product filtering
            var productAccessProvider = new ProductAccessProvider();

            productAccessProvider.TryApplyRecordLevelFiltersToFetch(right, fetch);

            return(result.GlobalPermissionGranted && result.PermissionGranted);
        }
示例#7
0
        private static bool TryAssertPortalCommentPermission(OrganizationServiceContext context, CrmEntityPermissionProvider entityPermissionProvider, CrmEntityPermissionRight right, EntityReference target)
        {
            var response = context.Execute <RetrieveResponse>(new RetrieveRequest
            {
                Target    = target,
                ColumnSet = new ColumnSet("regardingobjectid"),
            });

            var regarding = response.Entity.GetAttributeValue <EntityReference>("regardingobjectid");

            return(regarding != null &&
                   entityPermissionProvider.TryAssert(context, right, target, regarding: regarding));
        }
 /// <summary>
 /// Applies Record level filtering for Knowledge articles
 /// </summary>
 /// <param name="right">Curreent Permission Right</param>
 /// <param name="fetchIn">Existing Fetchxml to add addition filtering</param>
 public abstract void TryApplyRecordLevelFiltersToFetch(CrmEntityPermissionRight right, Fetch fetchIn);