Exemple #1
0
        public ActionResult QualifyLead(EntityReference entityReference, bool createAccount, bool createContact, bool createOpportunity)
        {
            var portal  = PortalCrmConfigurationManager.CreatePortalContext();
            var context = portal.ServiceContext;

            var crmEntityPermissionProvider = new CrmEntityPermissionProvider();

            if (!crmEntityPermissionProvider.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Entity_Permissions_Have_Not_Been_Defined_Message")));
            }

            var lead = context.RetrieveSingle(entityReference.LogicalName,
                                              FetchAttribute.None,
                                              new Condition("leadid", ConditionOperator.Equal, entityReference.Id));

            if (!crmEntityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Write, lead) ||
                !crmEntityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Create, "contact") ||
                !crmEntityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Create, "account") ||
                !crmEntityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Create, "opportunity"))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("DoNot_Have_Appropriate_Permissions")));
            }

            var adapter = new CoreDataAdapter(portal, context);

            adapter.QualifyLead(entityReference, createAccount, createContact, createOpportunity, null, null);

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
        public ActionResult GetNotes(EntityReference regarding, List <Order> orders, int page, int pageSize = DefaultPageSize)
        {
            string portalName          = null;
            var    portalContext       = PortalCrmConfigurationManager.CreatePortalContext();
            var    languageCodeSetting = portalContext.ServiceContext.GetSiteSettingValueByName(portalContext.Website, "Language Code");

            if (!string.IsNullOrWhiteSpace(languageCodeSetting))
            {
                int languageCode;
                if (int.TryParse(languageCodeSetting, out languageCode))
                {
                    portalName = languageCode.ToString(CultureInfo.InvariantCulture);
                }
            }

            var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: portalName);
            var dataAdapter             = new AnnotationDataAdapter(dataAdapterDependencies);
            var entityMetadata          = portalContext.ServiceContext.GetEntityMetadata(regarding.LogicalName, EntityFilters.All);
            var result                   = dataAdapter.GetAnnotations(regarding, orders, page, pageSize, entityMetadata: entityMetadata);
            var totalRecordCount         = result.TotalCount;
            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var crmLcid                  = HttpContext.GetCrmLcid();
            var records                  = result.Select(r => new NoteRecord(r, dataAdapterDependencies, entityPermissionProvider, entityMetadata, true, crmLcid));
            var data = new PaginatedGridData(records, totalRecordCount, page, pageSize);

            return(new JsonResult {
                Data = data, MaxJsonLength = int.MaxValue
            });
        }
        private IQueryable <Entity> GetLookupRecords(string fetchXml, OrganizationServiceContext context)
        {
            var fetch = Fetch.Parse(fetchXml);

            var crmEntityPermissionProvider = new CrmEntityPermissionProvider();

            crmEntityPermissionProvider.TryApplyRecordLevelFiltersToFetch(context, CrmEntityPermissionRight.Read, fetch);

            crmEntityPermissionProvider.TryApplyRecordLevelFiltersToFetch(context, CrmEntityPermissionRight.Append, fetch);

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

            contentAccessLevelProvider.TryApplyRecordLevelFiltersToFetch(CrmEntityPermissionRight.Read, fetch);

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

            productAccessProvider.TryApplyRecordLevelFiltersToFetch(CrmEntityPermissionRight.Read, fetch);

            var response = (RetrieveMultipleResponse)context.Execute(fetch.ToRetrieveMultipleRequest());

            var data = response.EntityCollection;

            if (data == null || data.Entities == null)
            {
                return(null);
            }

            return(data.Entities.AsQueryable());
        }
Exemple #4
0
        public override void Render(Context context, TextWriter result)
        {
            IPortalLiquidContext portalLiquidContext;

            if (!context.TryGetPortalLiquidContext(out portalLiquidContext))
            {
                return;
            }

            using (TextWriter xml = new StringWriter())
            {
                base.Render(context, xml);

                var fetch = Fetch.Parse(xml.ToString());

                var right = GetRight(context);

                CrmEntityPermissionProvider.EntityPermissionRightResult permissionResult = new CrmEntityPermissionProvider()
                                                                                           .TryApplyRecordLevelFiltersToFetch(portalLiquidContext.PortalViewContext.CreateServiceContext(), right, fetch);

                // Apply Content Access Level filtering
                var contentAccessLevelProvider = new ContentAccessLevelProvider();
                contentAccessLevelProvider.TryApplyRecordLevelFiltersToFetch(right, fetch);

                // Apply Product filtering
                var productAccessProvider = new ProductAccessProvider();
                productAccessProvider.TryApplyRecordLevelFiltersToFetch(CrmEntityPermissionRight.Read, fetch);

                context.Scopes.Last()[_variableName] = new FetchXmlQueryDrop(portalLiquidContext, fetch, permissionResult);
            }
        }
        /// <summary>
        /// Get the data for the chart by executing the <see cref="Query"/>. If <see cref="EntityPermissionsEnabled"/> then the <see cref="CrmEntityPermissionProvider"/> is used to apply filters and links to the <see cref="Query"/> to provide record level security filtering.
        /// </summary>
        /// <param name="serviceContext">The <see cref="OrganizationServiceContext"/> to be used to make the service call to retrieve the data.</param>
        /// <returns>A collection of <see cref="Entity"/> records.</returns>
        private IEnumerable <Entity> RetrieveData(OrganizationServiceContext serviceContext)
        {
            if (this.Query == null)
            {
                return(Enumerable.Empty <Entity>());
            }

            if (this.EntityPermissionsEnabled)
            {
                var crmEntityPermissionProvider = new CrmEntityPermissionProvider();

                var result = crmEntityPermissionProvider.TryApplyRecordLevelFiltersToFetch(serviceContext, CrmEntityPermissionRight.Read, this.Query);

                this.EntityPermissionDenied = !result.GlobalPermissionGranted && !result.PermissionGranted;

                if (this.EntityPermissionDenied)
                {
                    return(Enumerable.Empty <Entity>());
                }
            }

            this.Query.NoLock = true;

            var response = (RetrieveMultipleResponse)serviceContext.Execute(this.Query.ToRetrieveMultipleRequest());

            var data = response.EntityCollection.Entities;

            return(data);
        }
        public void DisableActionsBasedOnPermissions(OrganizationServiceContext context, string entityName, Guid entityId)
        {
            var entityMetadata = MetadataHelper.GetEntityMetadata(context, entityName);
            var primaryKeyName = entityMetadata.PrimaryIdAttribute;

            EnableActions = false;

            if (!EnableEntityPermissions)
            {
                return;
            }

            var crmEntityPermissionProvider = new CrmEntityPermissionProvider();

            var entity = context.CreateQuery(entityName).FirstOrDefault(e => e.GetAttributeValue <Guid>(primaryKeyName) == entityId);

            if (entity == null)
            {
                EnableActions = false;
                return;
            }

            DisableLinks(context, entityName, TopFormActionLinks, crmEntityPermissionProvider, entity);
            DisableLinks(context, entityName, BottomFormActionLinks, crmEntityPermissionProvider, entity);
        }
Exemple #7
0
        public ActionResult LoseOpportunity(EntityReference entityReference)
        {
            var portal         = PortalCrmConfigurationManager.CreatePortalContext();
            var serviceContext = portal.ServiceContext;

            var entityPermissionProvider = new CrmEntityPermissionProvider();

            if (!entityPermissionProvider.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Entity_Permissions_Have_Not_Been_Defined_Message")));
            }

            var entity = serviceContext.CreateQuery(entityReference.LogicalName).First(e => e.GetAttributeValue <Guid>("opportunityid") == entityReference.Id);
            var test   = entityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.Write, entity);

            if (!test)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("DoNot_Have_Appropriate_Permissions")));
            }

            var adapter = new CoreDataAdapter(portal, serviceContext);

            adapter.LoseOpportunity(entityReference);

            serviceContext.TryRemoveFromCache(entity);

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
Exemple #8
0
        public ActionResult CloseCase(EntityReference entityReference, string resolutionSubject, string resolutionDescription)
        {
            var portal  = PortalCrmConfigurationManager.CreatePortalContext();
            var context = portal.ServiceContext;

            var entityPermissionProvider = new CrmEntityPermissionProvider();

            if (!entityPermissionProvider.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Entity_Permissions_Have_Not_Been_Defined_Message")));
            }

            var entity = context.RetrieveSingle(entityReference.LogicalName,
                                                FetchAttribute.None,
                                                new Condition("incidentid", ConditionOperator.Equal, entityReference.Id));
            var test = entityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Write, entity);

            if (!test)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("DoNot_Have_Appropriate_Permissions")));
            }

            var adapter = new CoreDataAdapter(portal, context);

            adapter.CloseIncident(entityReference, resolutionSubject, resolutionDescription);

            if (FeatureCheckHelper.IsFeatureEnabled(FeatureNames.TelemetryFeatureUsage))
            {
                PortalFeatureTrace.TraceInstance.LogFeatureUsage(FeatureTraceCategory.Case, this.HttpContext, "close_incident", 1, entity.ToEntityReference(), "edit");
            }

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
Exemple #9
0
        public ActionResult ConvertOrderToInvoice(EntityReference entityReference)
        {
            var portal  = PortalCrmConfigurationManager.CreatePortalContext();
            var context = portal.ServiceContext;

            var crmEntityPermissionProvider = new CrmEntityPermissionProvider();

            if (!crmEntityPermissionProvider.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Entity_Permissions_Have_Not_Been_Defined_Message")));
            }

            var salesorder = context.CreateQuery(entityReference.LogicalName).First(e => e.GetAttributeValue <Guid>("salesorderid") == entityReference.Id);

            if (!crmEntityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Write, salesorder) ||
                !crmEntityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Create, "invoice"))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("DoNot_Have_Appropriate_Permissions")));
            }

            var adapter = new CoreDataAdapter(portal, context);

            adapter.ConvertSalesOrderToInvoice(entityReference);

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
        /// <summary>
        /// Constructor
        /// </summary>
        public SubgridViewLayout(ViewConfiguration configuration, EntityReference source, Relationship relationship, string viewEntityLogicalName,
                                 EntityView view  = null, string portalName = null,
                                 int languageCode = 0, bool addSelectColumn = false, bool addActionsColumn = false, string selectColumnHeaderText = "")
            : base(configuration, view, portalName, languageCode, addSelectColumn, addActionsColumn, selectColumnHeaderText)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }

            if (relationship == null)
            {
                throw new ArgumentNullException("relationship");
            }

            if (string.IsNullOrWhiteSpace(viewEntityLogicalName))
            {
                throw new ArgumentNullException("viewEntityLogicalName");
            }

            Source       = source;
            Relationship = relationship;

            if ((configuration.EnableEntityPermissions && AdxstudioCrmConfigurationManager.GetCrmSection().ContentMap.Enabled) &&
                configuration.AssociateActionLink.Enabled)
            {
                var serviceContext = PortalCrmConfigurationManager.CreateServiceContext(configuration.PortalName);
                var crmEntityPermissionProvider = new CrmEntityPermissionProvider(configuration.PortalName);

                configuration.AssociateActionLink.Enabled =
                    crmEntityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.AppendTo,
                                                          Retrieve(serviceContext, source)) &&
                    crmEntityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.Append, viewEntityLogicalName);
            }
        }
 public PortalCommentCreateResult(CrmEntityPermissionProvider provider, OrganizationServiceContext context, EntityReference regarding = null)
 {
     // To create and append a note to regarding object we need to test the following rights
     CanCreate         = provider.TryAssert(context, CrmEntityPermissionRight.Create, entityName, regarding);
     CanAppend         = provider.TryAssert(context, CrmEntityPermissionRight.Append, entityName, regarding);
     CanAppendTo       = provider.TryAssert(context, CrmEntityPermissionRight.AppendTo, regarding);
     PermissionsExist  = provider.PermissionsExist;
     PermissionGranted = CanCreate && CanAppend && CanAppendTo;
 }
Exemple #12
0
        public ISharePointResult AddFiles(EntityReference regarding, IList <HttpPostedFileBase> files, bool overwrite = true, string folderPath = null)
        {
            var context = _dependencies.GetServiceContextForWrite();
            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var result = new SharePointResult(regarding, entityPermissionProvider, context);

            if (files == null || !files.Any())
            {
                return(result);
            }

            var entityMetadata = context.GetEntityMetadata(regarding.LogicalName);
            var entity         = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id);

            // assert permission to create the sharepointdocumentlocation entity
            if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity.");
                return(result);
            }

            var spConnection = new SharePointConnection(SharePointConnectionStringName);
            var spSite       = context.GetSharePointSiteFromUrl(spConnection.Url);

            var location = GetDocumentLocation(context, entity, entityMetadata, spSite);

            // assert permission to write the sharepointdocumentlocation entity
            if (!result.CanWrite)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Write document locations.");
                return(result);
            }

            var factory = new ClientFactory();

            using (var client = factory.CreateClientContext(spConnection))
            {
                // retrieve the SharePoint list and folder names for the document location
                string listUrl, folderUrl;

                context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl);

                var folder = client.AddOrGetExistingFolder(listUrl, folderUrl + folderPath);

                foreach (var postedFile in files)
                {
                    using (var file = postedFile.InputStream)
                    {
                        // upload a file to the folder
                        client.SaveFile(file, folder, Path.GetFileName(postedFile.FileName), overwrite);
                    }
                }
            }

            return(result);
        }
 public AnnotationDeleteResult(IAnnotation note, CrmEntityPermissionProvider provider, OrganizationServiceContext context, EntityMetadata entityMetadata = null)
 {
     Annotation = note;
     if (note.Entity == null)
     {
         return;
     }
     PermissionsExist  = provider.PermissionsExist;
     PermissionGranted = provider.TryAssert(context, CrmEntityPermissionRight.Delete, note.Entity, entityMetadata, regarding: note.Regarding);
 }
Exemple #14
0
        /// <summary>
        /// Indicates whether entity permissions permit the user to add notes to the target entity.
        /// </summary>
        protected virtual bool TryAssertAddNote(Guid regardingId)
        {
            ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format("Start Assert Add Note Privilege on: {0} {1}", Metadata.TargetEntityName, regardingId));

            if (!Metadata.FormView.EnableEntityPermissions)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. Entity Permissions have not been enabled.");

                return(false);
            }

            var regarding = new EntityReference(Metadata.TargetEntityName, regardingId);
            var dataAdapterDependencies  = new PortalConfigurationDataAdapterDependencies();
            var serviceContext           = dataAdapterDependencies.GetServiceContext();
            var entityPermissionProvider = new CrmEntityPermissionProvider();

            if (!entityPermissionProvider.PermissionsExist)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. Entity Permissions have not been defined. Your request could not be completed.");

                return(false);
            }

            var entityType     = IsTimeline ? "adx_portalcomment" : "annotation";
            var entityMetadata = serviceContext.GetEntityMetadata(regarding.LogicalName, EntityFilters.All);
            var primaryKeyName = entityMetadata.PrimaryIdAttribute;
            var entity         =
                serviceContext.CreateQuery(regarding.LogicalName)
                .First(e => e.GetAttributeValue <Guid>(primaryKeyName) == regarding.Id);
            var canAppendTo = entityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.AppendTo, entity, entityMetadata);
            var canCreate   = entityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.Create, entityType, regarding);
            var canAppend   = entityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.Append, entityType, regarding);

            if (canCreate & canAppend & canAppendTo)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format("Add Note Permission Granted: {0} {1}", EntityNamePrivacy.GetEntityName(Metadata.TargetEntityName), regardingId));

                return(true);
            }

            if (!canCreate)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create notes.");
            }
            else if (!canAppendTo)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format("Permission Denied. You do not have the appropriate Entity Permissions to Append To {0}.", EntityNamePrivacy.GetEntityName(entity.LogicalName)));
            }
            else
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Append notes.");
            }

            return(false);
        }
Exemple #15
0
        public ISharePointResult AddFolder(EntityReference regarding, string name, string folderPath = null)
        {
            var context = _dependencies.GetServiceContextForWrite();
            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var result = new SharePointResult(regarding, entityPermissionProvider, context);

            if (string.IsNullOrWhiteSpace(name))
            {
                return(result);
            }

            // Throw exception if the name begins or ends with a dot, contains consecutive dots,
            // or any of the following invalid characters ~ " # % & * : < > ? / \ { | }
            if (Regex.IsMatch(name, @"(\.{2,})|([\~\""\#\%\&\*\:\<\>\?\/\\\{\|\}])|(^\.)|(\.$)"))
            {
                throw new Exception("The folder name contains invalid characters. Please use a different name. Valid folder names can't begin or end with a period, can't contain consecutive periods, and can't contain any of the following characters: ~  # % & * : < > ? / \\ { | }.");
            }

            var entityMetadata = context.GetEntityMetadata(regarding.LogicalName);
            var entity         = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id);

            // assert permission to create the sharepointdocumentlocation entity
            if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity.");
                return(result);
            }

            var spConnection = new SharePointConnection(SharePointConnectionStringName);
            var spSite       = context.GetSharePointSiteFromUrl(spConnection.Url);

            var location = GetDocumentLocation(context, entity, entityMetadata, spSite);

            // assert permission to write the sharepointdocumentlocation entity
            if (!result.CanWrite)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Write document locations.");
                return(result);
            }

            var factory = new ClientFactory();

            using (var client = factory.CreateClientContext(spConnection))
            {
                // retrieve the SharePoint list and folder names for the document location
                string listUrl, folderUrl;

                context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl);

                client.AddOrGetExistingFolder(listUrl, "{0}{1}/{2}".FormatWith(folderUrl, folderPath, name));
            }

            return(result);
        }
        private bool ValidateEntityPermission(OrganizationServiceContext serviceContext, CrmEntitySearchResult result)
        {
            if (!AdxstudioCrmConfigurationManager.GetCrmSection().ContentMap.Enabled)
            {
                return(false);
            }

            var permissionResult = new CrmEntityPermissionProvider(PortalName).TryAssert(serviceContext, result.Entity);

            return(permissionResult.RulesExist && permissionResult.CanRead);
        }
Exemple #17
0
        protected virtual bool TryAssertByCrmEntityPermissionProvider(OrganizationServiceContext context, Entity entity)
        {
            if (!AdxstudioCrmConfigurationManager.GetCrmSection().ContentMap.Enabled)
            {
                return(false);
            }

            var crmEntityPermissionProvider = new CrmEntityPermissionProvider(PortalName);

            return(crmEntityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Read, entity));
        }
Exemple #18
0
            public ActivityRecord(IActivity activity, DataAdapterDependencies dataAdapterDependencies,
                                  CrmEntityPermissionProvider provider, EntityMetadata entityMetadata = null, bool readGranted = false, int?crmLcid = null)
                : base(
                    activity.Entity, dataAdapterDependencies.GetServiceContext(), provider, entityMetadata, readGranted,
                    activity.Regarding, crmLcid: crmLcid)
            {
                if (activity == null)
                {
                    throw new ArgumentNullException("activity");
                }

                SetPropertyValues(activity, dataAdapterDependencies);
            }
        private static Entity GetDocumentLocation(OrganizationServiceContext context, Entity entity, string folderName)
        {
            var spConnection = new SharePointConnection("SharePoint");
            var spSite       = context.GetSharePointSiteFromUrl(spConnection.Url);

            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var result = new SharePointResult(entity.ToEntityReference(), entityPermissionProvider, context);

            if (!result.PermissionsExist || !result.CanCreate || !result.CanAppend || !result.CanAppendTo)
            {
                return(null);
            }

            return(context.AddOrGetExistingDocumentLocationAndSave <Entity>(spSite, entity, folderName));
        }
Exemple #20
0
        public ActionResult GetActivities(EntityReference regarding, List <Order> orders, int page, int pageSize = DefaultPageSize)
        {
            var portalContext = PortalCrmConfigurationManager.CreatePortalContext();

            var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext);
            var dataAdapter             = new ActivityDataAdapter(dataAdapterDependencies);
            var entityMetadata          = portalContext.ServiceContext.GetEntityMetadata(regarding.LogicalName, EntityFilters.All);
            var result = dataAdapter.GetActivities(regarding, orders, page, pageSize, entityMetadata);
            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var crmLcid = HttpContext.GetCrmLcid();
            var records = result.Select(r => new ActivityRecord(r, dataAdapterDependencies, entityPermissionProvider, entityMetadata, true, crmLcid)).ToArray();
            var data    = new PaginatedGridData(records, result.TotalCount, page, pageSize);

            return(new JsonResult {
                Data = data, MaxJsonLength = int.MaxValue
            });
        }
Exemple #21
0
        public ActionResult Associate(AssociateRequest request)
        {
            string portalName          = null;
            var    portalContext       = PortalCrmConfigurationManager.CreatePortalContext();
            var    languageCodeSetting = portalContext.ServiceContext.GetSiteSettingValueByName(portalContext.Website, "Language Code");

            if (!string.IsNullOrWhiteSpace(languageCodeSetting))
            {
                int languageCode;
                if (int.TryParse(languageCodeSetting, out languageCode))
                {
                    portalName = languageCode.ToString(CultureInfo.InvariantCulture);
                }
            }

            var dataAdapterDependencies  = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: portalName);
            var serviceContext           = dataAdapterDependencies.GetServiceContext();
            var entityPermissionProvider = new CrmEntityPermissionProvider();

            if (!entityPermissionProvider.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Entity_Permissions_Have_Not_Been_Defined_Message")));
            }

            var relatedEntities = request.RelatedEntities
                                  .Where(e => entityPermissionProvider.TryAssertAssociation(serviceContext, request.Target, request.Relationship, e))
                                  .ToArray();

            if (!relatedEntities.Any())
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Missing_Permissions_For_Operation_Exception")));
            }

            relatedEntities = FilterAlreadyAssociated(serviceContext, request.Relationship, request.Target, relatedEntities);

            var filtered = new AssociateRequest
            {
                Target          = request.Target,
                Relationship    = request.Relationship,
                RelatedEntities = new EntityReferenceCollection(relatedEntities)
            };

            serviceContext.Execute(filtered);

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
Exemple #22
0
        public ActionResult Delete(EntityReference entityReference)
        {
            string portalName          = null;
            var    portalContext       = PortalCrmConfigurationManager.CreatePortalContext();
            var    languageCodeSetting = portalContext.ServiceContext.GetSiteSettingValueByName(portalContext.Website, "Language Code");

            if (!string.IsNullOrWhiteSpace(languageCodeSetting))
            {
                int languageCode;
                if (int.TryParse(languageCodeSetting, out languageCode))
                {
                    portalName = languageCode.ToString(CultureInfo.InvariantCulture);
                }
            }

            var dataAdapterDependencies  = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: portalName);
            var serviceContext           = dataAdapterDependencies.GetServiceContext();
            var entityPermissionProvider = new CrmEntityPermissionProvider();

            if (!entityPermissionProvider.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("Entity_Permissions_Have_Not_Been_Defined_Message")));
            }

            var entityMetadata = serviceContext.GetEntityMetadata(entityReference.LogicalName, EntityFilters.All);
            var primaryKeyName = entityMetadata.PrimaryIdAttribute;
            var entity         =
                serviceContext.CreateQuery(entityReference.LogicalName)
                .First(e => e.GetAttributeValue <Guid>(primaryKeyName) == entityReference.Id);
            var test = entityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.Delete, entity);

            if (test)
            {
                using (PerformanceProfiler.Instance.StartMarker(PerformanceMarkerName.EntityGridController, PerformanceMarkerArea.Crm, PerformanceMarkerTagName.Delete))
                {
                    serviceContext.DeleteObject(entity);
                    serviceContext.SaveChanges();
                }
            }
            else
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("No_Permissions_To_Delete_This_Record")));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
Exemple #23
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);
        }
        private Fetch CreateFetch(OrganizationServiceContext context,
                                  string entityName,
                                  string latitudeFieldName,
                                  string longitudeFieldName)
        {
            var fetchIn = new Fetch
            {
                Entity = new FetchEntity
                {
                    Name    = entityName,
                    Filters = new List <AdxFilter>
                    {
                        new AdxFilter
                        {
                            Type       = LogicalOperator.And,
                            Conditions = new[]
                            {
                                new Condition(latitudeFieldName, ConditionOperator.NotNull),
                                new Condition(longitudeFieldName, ConditionOperator.NotNull)
                            }
                        }
                    }
                }
            };

            var permissionChecker     = new CrmEntityPermissionProvider();
            var permissionCheckResult = permissionChecker.TryApplyRecordLevelFiltersToFetch(context, CrmEntityPermissionRight.Read, fetchIn);

            if (!permissionCheckResult.GlobalPermissionGranted && !permissionCheckResult.PermissionGranted)
            {
                return(null);
            }

            var contentAccessLevelProvider = new ContentAccessLevelProvider();

            contentAccessLevelProvider.TryApplyRecordLevelFiltersToFetch(CrmEntityPermissionRight.Read, fetchIn);

            var productAccessProvider = new ProductAccessProvider();

            productAccessProvider.TryApplyRecordLevelFiltersToFetch(CrmEntityPermissionRight.Read, fetchIn);

            return(fetchIn);
        }
        public ActionResult Disassociate(DisassociateRequest request)
        {
            string portalName          = null;
            var    portalContext       = PortalCrmConfigurationManager.CreatePortalContext();
            var    languageCodeSetting = portalContext.ServiceContext.GetSiteSettingValueByName(portalContext.Website, "Language Code");

            if (!string.IsNullOrWhiteSpace(languageCodeSetting))
            {
                int languageCode;
                if (int.TryParse(languageCodeSetting, out languageCode))
                {
                    portalName = languageCode.ToString(CultureInfo.InvariantCulture);
                }
            }

            var dataAdapterDependencies  = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: portalName);
            var serviceContext           = dataAdapterDependencies.GetServiceContext();
            var entityPermissionProvider = new CrmEntityPermissionProvider();

            if (!entityPermissionProvider.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Entity Permissions have not been defined. Your request could not be completed."));
            }

            var relatedEntities =
                request.RelatedEntities.Where(
                    related => entityPermissionProvider.TryAssertAssociation(serviceContext, request.Target, request.Relationship, related)).ToList();

            if (relatedEntities.Any())
            {
                var filtered = new DisassociateRequest {
                    Target = request.Target, Relationship = request.Relationship, RelatedEntities = new EntityReferenceCollection(relatedEntities)
                };

                serviceContext.Execute(filtered);
            }
            else
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Permission Denied. You do not have the appropriate Entity Permissions to disassociate the records."));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
        public ActionResult Delete(EntityReference entityReference)
        {
            string portalName          = null;
            var    portalContext       = PortalCrmConfigurationManager.CreatePortalContext();
            var    languageCodeSetting = portalContext.ServiceContext.GetSiteSettingValueByName(portalContext.Website, "Language Code");

            if (!string.IsNullOrWhiteSpace(languageCodeSetting))
            {
                int languageCode;
                if (int.TryParse(languageCodeSetting, out languageCode))
                {
                    portalName = languageCode.ToString(CultureInfo.InvariantCulture);
                }
            }

            var dataAdapterDependencies  = new PortalConfigurationDataAdapterDependencies(requestContext: Request.RequestContext, portalName: portalName);
            var serviceContext           = dataAdapterDependencies.GetServiceContext();
            var entityPermissionProvider = new CrmEntityPermissionProvider();

            if (!entityPermissionProvider.PermissionsExist)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Entity Permissions have not been defined. Your request could not be completed."));
            }

            var entityMetadata = serviceContext.GetEntityMetadata(entityReference.LogicalName, EntityFilters.All);
            var primaryKeyName = entityMetadata.PrimaryIdAttribute;
            var entity         =
                serviceContext.CreateQuery(entityReference.LogicalName)
                .First(e => e.GetAttributeValue <Guid>(primaryKeyName) == entityReference.Id);
            var test = entityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.Delete, entity);

            if (test)
            {
                serviceContext.DeleteObject(entity);
                serviceContext.SaveChanges();
            }
            else
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Permission Denied. You do not have the appropriate Entity Permissions to delete this record."));
            }

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
Exemple #27
0
        protected virtual bool TryAssertByCrmEntityPermissionProvider(OrganizationServiceContext context, Entity entity, EntityReference regarding)
        {
            if (!AdxstudioCrmConfigurationManager.GetCrmSection().ContentMap.Enabled)
            {
                return(false);
            }

            var crmEntityPermissionProvider = new CrmEntityPermissionProvider(PortalName);

            if (string.Equals(entity.LogicalName, "annotation", StringComparison.InvariantCulture) &&
                regarding != null &&
                string.Equals(regarding.LogicalName, "adx_portalcomment", StringComparison.InvariantCulture))
            {
                // If can read portal comment, bypass assertion check on notes and assume read permission.
                return(TryAssertPortalCommentPermission(context, crmEntityPermissionProvider, CrmEntityPermissionRight.Read, regarding));
            }

            return(crmEntityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Read, entity, regarding: regarding));
        }
Exemple #28
0
        /// <summary>
        /// Evaluating whether user has create privilege or not
        /// <param name="serviceContext">serviceContext</param>
        /// <returns>True if user has create Privilege otherwise returns False</returns>
        /// </summary>
        protected bool EvaluateCreatePrivilege(OrganizationServiceContext serviceContext)
        {
            bool hasCreatePrivilege = false;

            if (Metadata.LookupReferenceEntityFormId != null)
            {
                var entityForm = serviceContext.RetrieveSingle(
                    "adx_entityform",
                    new[] { "adx_entityname", "adx_mode" },
                    new[] {
                    new Condition("adx_entityformid", ConditionOperator.Equal, Metadata.LookupReferenceEntityFormId),
                    new Condition("statuscode", ConditionOperator.NotNull),
                    new Condition("statuscode", ConditionOperator.Equal, (int)Enums.EntityFormStatusCode.Active)
                });

                if (entityForm != null)
                {
                    var entityLogicalName = entityForm.GetAttributeValue <string>("adx_entityname");
                    var mode = entityForm.GetAttributeValue <OptionSetValue>("adx_mode");

                    if ((mode.Value == (int)WebFormStepMode.Insert) && (Metadata.LookupTargets.Contains(entityLogicalName)))                     // Insert
                    {
                        var crmEntityPermissionProvider = new CrmEntityPermissionProvider();
                        hasCreatePrivilege = crmEntityPermissionProvider.TryAssert(serviceContext, CrmEntityPermissionRight.Create, entityLogicalName);
                        return(hasCreatePrivilege);
                    }
                    else
                    {
                        return(hasCreatePrivilege);
                    }
                }
                else
                {
                    return(hasCreatePrivilege);
                }
            }
            else
            {
                return(hasCreatePrivilege);
            }
        }
Exemple #29
0
        public ActionResult GenerateQuoteFromOpportunity(EntityReference entityReference)
        {
            var portal  = PortalCrmConfigurationManager.CreatePortalContext();
            var context = portal.ServiceContext;

            var crmEntityPermissionProvider = new CrmEntityPermissionProvider();

            var opportunity = context.CreateQuery(entityReference.LogicalName).First(e => e.GetAttributeValue <Guid>("opportunityid") == entityReference.Id);

            if (!crmEntityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Write, opportunity) ||
                !crmEntityPermissionProvider.TryAssert(context, CrmEntityPermissionRight.Create, "quote"))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, ResourceManager.GetString("DoNot_Have_Appropriate_Permissions")));
            }

            var adapter = new CoreDataAdapter(portal, context);

            adapter.GenerateQuoteFromOpportunity(entityReference);

            return(new HttpStatusCodeResult(HttpStatusCode.NoContent));
        }
Exemple #30
0
        public ISharePointResult DeleteItem(EntityReference regarding, int id)
        {
            var context = _dependencies.GetServiceContextForWrite();
            var entityPermissionProvider = new CrmEntityPermissionProvider();
            var result = new SharePointResult(regarding, entityPermissionProvider, context);

            // assert permission to delete the sharepointdocumentlocation entity
            if (!result.PermissionsExist || !result.CanDelete)
            {
                ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Permission Denied. You do not have the appropriate Entity Permissions to Create or Append document locations or AppendTo the regarding entity.");
                return(result);
            }

            var entityMetadata = context.GetEntityMetadata(regarding.LogicalName);
            var entity         = context.CreateQuery(regarding.LogicalName).First(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == regarding.Id);

            var spConnection = new SharePointConnection(SharePointConnectionStringName);
            var spSite       = context.GetSharePointSiteFromUrl(spConnection.Url);

            var location = GetDocumentLocation(context, entity, entityMetadata, spSite);

            var factory = new ClientFactory();

            using (var client = factory.CreateClientContext(spConnection))
            {
                // retrieve the SharePoint list and folder names for the document location
                string listUrl, folderUrl;

                context.GetDocumentLocationListAndFolder(location, out listUrl, out folderUrl);

                var list = client.GetListByUrl(listUrl);
                var item = list.GetItemById(id);
                item.DeleteObject();

                client.ExecuteQuery();
            }

            return(result);
        }