/// <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); }
/// <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); }
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; }
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); }
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);