protected virtual bool TryAssertByCrmEntitySecurityProvider(OrganizationServiceContext context, EntityReference regardingId) { if (regardingId == null) { return(false); } // determine the primary ID attribute var request = new RetrieveEntityRequest { LogicalName = regardingId.LogicalName, EntityFilters = EntityFilters.Entity }; var response = context.Execute(request) as RetrieveEntityResponse; var primaryIdAttribute = response.EntityMetadata.PrimaryIdAttribute; var regarding = context.CreateQuery(regardingId.LogicalName).FirstOrDefault(e => e.GetAttributeValue <Guid>(primaryIdAttribute) == regardingId.Id); if (regarding == null) { return(false); } // assert read access on the regarding entity var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); return(securityProvider.TryAssert(context, regarding, CrmEntityRight.Read)); }
public virtual void AttachFile(OrganizationServiceContext context, Entity entity, HttpPostedFile postedFile) { if (context == null) { throw new ArgumentNullException("context"); } if (entity == null) { throw new ArgumentNullException("entity"); } if (postedFile == null) { throw new ArgumentNullException("postedFile"); } var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); securityProvider.Assert(context, entity, CrmEntityRight.Change); var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(requestContext: HttpContext.Current.Request.RequestContext, portalName: PortalName); var dataAdapter = new AnnotationDataAdapter(dataAdapterDependencies); var result = dataAdapter.CreateAnnotation(entity.ToEntityReference(), string.Empty, string.Empty, new HttpPostedFileWrapper(postedFile)); if (result.Annotation.Entity.Id != null) { throw new InvalidOperationException("The file couldn't be attached to entity {0}.".FormatWith(entity)); } }
public PortalContextDataAdapterDependencies(IPortalContext portalContext, string portalName = null, RequestContext requestContext = null) : base( portalContext.ServiceContext, PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName), PortalCrmConfigurationManager.CreateDependencyProvider(portalName).GetDependency <IEntityUrlProvider>(), portalContext, requestContext) { }
public PortalConfigurationDataAdapterDependencies(string portalName = null, RequestContext requestContext = null) : base( PortalCrmConfigurationManager.CreateServiceContext(portalName), PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName), PortalCrmConfigurationManager.CreateDependencyProvider(portalName).GetDependency <IEntityUrlProvider>(), PortalCrmConfigurationManager.CreatePortalContext(portalName, requestContext)) { PortalName = portalName; }
public ActionResult Index(string number) { OrganizationServiceContext serviceContext = PortalCrmConfigurationManager.CreateServiceContext(); var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(); var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider().GetDependency <IEntityUrlProvider>(); return(this.GetIndexView(number, serviceContext, securityProvider, urlProvider)); }
/// <summary> /// Constructor. /// </summary> /// <param name="portalContext">The <see cref="IPortalContext"/> to get dependencies from.</param> /// <param name="portalName">The configured name of the portal to get a security provider dependency from.</param> public PortalContextDataAdapterDependencies(IPortalContext portalContext, string portalName = null) : base( portalContext.ServiceContext, PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName), HttpContext.Current != null ? new HttpContextWrapper(HttpContext.Current) : null, portalContext) { }
public WebsiteDataAdapterDependencies(OrganizationServiceContext serviceContext, Entity website, IPortalContext portalContext, string portalName = null) : base( serviceContext, PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName), PortalCrmConfigurationManager.CreateDependencyProvider(portalName).GetDependency <IEntityUrlProvider>(), website.ToEntityReference(), portalContext.User == null ? null : portalContext.User.ToEntityReference()) { PortalName = portalName; }
protected void Page_Init(object sender, EventArgs e) { var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(); _sponsors = ServiceContext.CreateQuery("adx_eventsponsor") .Where(es => es.GetAttributeValue <EntityReference>("adx_websiteid") == Website.ToEntityReference()) .ToArray() .Where(es => securityProvider.TryAssert(ServiceContext, es, CrmEntityRight.Read)) .ToArray(); }
public static IEnumerable <Entity> GetPublishedSurveys(this OrganizationServiceContext context, Entity website, string portalName = null) { website.AssertEntityName("adx_website"); var surveys = website.GetRelatedEntities(context, "adx_website_survey"); var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName); return(surveys.Where(s => securityProvider.TryAssert(context, s, CrmEntityRight.Read))); }
protected virtual bool HasEditPermission(Entity entity) { var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); var portal = PortalCrmConfigurationManager.CreatePortalContext(PortalName); var context = portal.ServiceContext; entity = context.MergeClone(entity); return(securityProvider.TryAssert(context, entity, CrmEntityRight.Change)); }
protected void Page_Load(object sender, EventArgs e) { var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(); Speakers.DataSource = ServiceContext.CreateQuery("adx_eventspeaker").Where(es => es.GetAttributeValue <EntityReference>("adx_websiteid") == Website.ToEntityReference()).ToArray() .Where(es => securityProvider.TryAssert(ServiceContext, es, CrmEntityRight.Read)) .OrderBy(es => es.GetAttributeValue <string>("adx_name")) .ToArray(); Speakers.DataBind(); }
public IPortalViewEntity GetEntity(OrganizationServiceContext serviceContext, Entity entity) { if (entity == null) { return(null); } var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <IEntityUrlProvider>(); return(new PortalViewEntity(serviceContext, entity, securityProvider, urlProvider)); }
private static IEnumerable <SyndicationItem> GetSyndicationItems(OrganizationServiceContext serviceContext, EntityReference newsRootPage) { var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(); return(serviceContext.CreateQuery("adx_webpage") .Where(e => e.GetAttributeValue <EntityReference>("adx_parentpageid") == newsRootPage) .OrderByDescending(e => e.GetAttributeValue <DateTime?>("adx_displaydate")) .Take(20) .ToArray() .Where(e => securityProvider.TryAssert(serviceContext, e, CrmEntityRight.Read)) .Select(e => GetSyndicationItem(serviceContext, e))); }
public static IEnumerable <Entity> GetPublishedEvents(this OrganizationServiceContext context, Entity site, string portalName = null) { site.AssertEntityName("adx_website"); var findEvents = from e in context.CreateQuery("adx_event") where e.GetAttributeValue <EntityReference>("adx_websiteid") == site.ToEntityReference() select e; var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName); return(findEvents.ToList().Where(e => securityProvider.TryAssert(context, e, CrmEntityRight.Read))); }
public void AttachFile(OrganizationServiceContext context, Entity entity, HttpPostedFile postedFile) { context.ThrowOnNull("context"); entity.ThrowOnNull("entity"); postedFile.ThrowOnNull("postedFile"); var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); securityProvider.Assert(context, entity, CrmEntityRight.Change); if (!context.AddNoteAndSave(entity, string.Empty, string.Empty, postedFile)) { throw new InvalidOperationException("Failed to attach file to entity {0}.".FormatWith(entity)); } }
public SingleWebsiteCmsDataServiceQueryInterceptor(string portalName) { _securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName); var portal = PortalCrmConfigurationManager.CreatePortalContext(portalName); var website = portal.Website; if (website == null) { throw new ArgumentException("The specified portal {0} doesn't have a configured website.".FormatWith(portalName), "portalName"); } website.AssertEntityName("adx_website"); _website = website.ToEntityReference(); }
public ActionResult Index(string number) { var serviceContext = PortalCrmConfigurationManager.CreateServiceContext(); var kbarticle = serviceContext.CreateQuery("kbarticle") .FirstOrDefault(e => e.GetAttributeValue <string>("number") == number); if (kbarticle == null) { ADXTrace.Instance.TraceWarning(TraceCategory.Application, "User Config issue:Knowledge base article not found exception by Article number"); return(HttpNotFound(ResourceManager.GetString("Knowledge_Base_Article_Not_Found_Exception").FormatWith(number))); } var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(); if (!securityProvider.TryAssert(serviceContext, kbarticle, CrmEntityRight.Read)) { ADXTrace.Instance.TraceWarning(TraceCategory.Application, "User Config issue:Knowledge Base Article: No read permission by Article number"); return(HttpNotFound(ResourceManager.GetString("Knowledge_Base_Article_Not_Found_Exception").FormatWith(number))); } var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider().GetDependency <IEntityUrlProvider>(); var adx_kbarticle_kbarticle = kbarticle.GetRelatedEntities(serviceContext, new Relationship("adx_kbarticle_kbarticle") { PrimaryEntityRole = EntityRole.Referenced }); var relatedArticles = adx_kbarticle_kbarticle .Where(e => securityProvider.TryAssert(serviceContext, e, CrmEntityRight.Read)) .Select(e => new { Title = e.GetAttributeValue <string>("title"), Url = urlProvider.GetUrl(serviceContext, e) }) .Where(e => !(string.IsNullOrEmpty(e.Title) || string.IsNullOrEmpty(e.Url))) .Select(e => new RelatedArticle(e.Title, e.Url)) .OrderBy(e => e.Title); //Log Customer Journey Tracking if (FeatureCheckHelper.IsFeatureEnabled(FeatureNames.CustomerJourneyTracking)) { PortalTrackingTrace.TraceInstance.Log(Constants.Article, kbarticle.Id.ToString(), kbarticle.GetAttributeValue <string>("title")); } return(View(new ArticleViewModel(kbarticle, relatedArticles))); }
public SingleWebsiteCmsDataServiceQueryInterceptor(string portalName) { _securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName); var portal = PortalCrmConfigurationManager.CreatePortalContext(portalName); var website = portal.Website; if (website == null) { throw new ArgumentException("The specified portal '{0}' does not have a configured website.".FormatWith(portalName), "portalName"); } website.AssertEntityName("adx_website"); var id = website.GetAttributeValue <Guid?>("adx_websiteid"); _websiteID = id.HasValue ? id.Value : website.Id; }
private bool TryGetWebLinkSetEntity(string webLinkSetName, out Entity webLinkSet) { webLinkSet = null; if (string.IsNullOrEmpty(webLinkSetName)) { return(false); } var portal = PortalCrmConfigurationManager.CreatePortalContext(PortalName); var context = portal.ServiceContext; webLinkSet = context.GetLinkSetByName(portal.Website, WebLinkSetName); var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); return(webLinkSet != null && securityProvider.TryAssert(context, webLinkSet, CrmEntityRight.Read)); }
protected virtual void ProcessRequest(HttpContext context, ICmsEntityServiceProvider serviceProvider, Guid portalScopeId, IPortalContext portal, OrganizationServiceContext serviceContext, EntityReference entityReference) { if (context == null) { throw new ArgumentNullException("context"); } if (serviceProvider == null) { throw new ArgumentNullException("serviceProvider"); } if (portal == null) { throw new ArgumentNullException("portal"); } if (serviceContext == null) { throw new ArgumentNullException("serviceContext"); } if (entityReference == null) { throw new ArgumentNullException("entityReference"); } var entityMetadata = new CmsEntityMetadata(serviceContext, entityReference.LogicalName); var entity = serviceProvider.ExecuteEntityQuery(context, portal, serviceContext, entityReference, entityMetadata); if (entity == null) { throw new CmsEntityServiceException(HttpStatusCode.NotFound, "Entity not found."); } var security = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); AssertRequestEntitySecurity(portal, serviceContext, entity, security); ProcessRequest(context, serviceProvider, portalScopeId, portal, serviceContext, entity, entityMetadata, security); }
public void ProcessRequest(HttpContext context) { var serviceContext = PortalCrmConfigurationManager.CreateServiceContext(PortalName); var security = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); var eventSchedule = serviceContext.CreateQuery("adx_eventschedule") .FirstOrDefault(e => e.GetAttributeValue <Guid>("adx_eventscheduleid") == _eventScheduleId); if (eventSchedule == null || !security.TryAssert(serviceContext, eventSchedule, CrmEntityRight.Read)) { NotFound(context.Response, ResourceManager.GetString("Event_Not_Found")); return; } var @event = eventSchedule.GetRelatedEntity(serviceContext, new Relationship("adx_event_eventschedule")); if (@event == null) { NotFound(context.Response, ResourceManager.GetString("Event_Not_Found")); return; } var vevent = new VEvent { Uid = "{0}@{1}".FormatWith(eventSchedule.Id, context.Request.Url.Host), Start = eventSchedule.GetAttributeValue <DateTime?>("adx_starttime"), End = eventSchedule.GetAttributeValue <DateTime?>("adx_endtime"), Timestamp = DateTime.UtcNow, Summary = @event.GetAttributeValue <string>("adx_name"), Description = VCalendar.StripHtml(@event.GetAttributeValue <string>("adx_content")), DescriptionHtml = @event.GetAttributeValue <string>("adx_content"), Location = @event.GetAttributeValue <string>("adx_locationname"), RecurrenceRule = GetRecurrenceRule(eventSchedule), }; var vcalendar = new VCalendar(new[] { vevent }); context.Response.ContentType = "text/calendar"; context.Response.Write(vcalendar.ToString()); }
protected override void ProcessRequest(HttpContext context, ICmsEntityServiceProvider serviceProvider, Guid portalScopeId, IPortalContext portal, OrganizationServiceContext serviceContext, EntityReference entityReference) { var entityMetadata = new CmsEntityMetadata(serviceContext, entityReference.LogicalName); var query = serviceContext.CreateQuery(entityReference.LogicalName); // If the target entity is scoped to a website, filter the query by the current website. if (entityMetadata.HasAttribute("adx_websiteid")) { query = query.Where(e => e.GetAttributeValue <EntityReference>("adx_websiteid") == portal.Website.ToEntityReference()); } var entity = query.FirstOrDefault(e => e.GetAttributeValue <Guid>(entityMetadata.PrimaryIdAttribute) == entityReference.Id); if (entity == null) { throw new CmsEntityServiceException(HttpStatusCode.NotFound, "Entity not found."); } var security = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); if (!security.TryAssert(serviceContext, entity, CrmEntityRight.Read)) { throw new CmsEntityServiceException(HttpStatusCode.Forbidden, "Entity access denied."); } var url = serviceContext.GetUrl(entity); if (url == null) { throw new CmsEntityServiceException(HttpStatusCode.NotFound, "URL for entity not found."); } WriteResponse(context.Response, new JObject { { "d", new JObject { { "Url", new JValue(url) } } } }); }
public ActionResult Index(string number) { var serviceContext = PortalCrmConfigurationManager.CreateServiceContext(); var kbarticle = serviceContext.CreateQuery("kbarticle") .FirstOrDefault(e => e.GetAttributeValue <string>("number") == number); if (kbarticle == null) { return(HttpNotFound(@"Knowledge base article ""{0}"" not found.".FormatWith(number))); } var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(); if (!securityProvider.TryAssert(serviceContext, kbarticle, CrmEntityRight.Read)) { return(HttpNotFound(@"Knowledge base article ""{0}"" not found.".FormatWith(number))); } var urlProvider = PortalCrmConfigurationManager.CreateDependencyProvider().GetDependency <IEntityUrlProvider>(); var adx_kbarticle_kbarticle = kbarticle.GetRelatedEntities(serviceContext, new Relationship("adx_kbarticle_kbarticle") { PrimaryEntityRole = EntityRole.Referenced }); var relatedArticles = adx_kbarticle_kbarticle .Where(e => securityProvider.TryAssert(serviceContext, e, CrmEntityRight.Read)) .Select(e => new { Title = e.GetAttributeValue <string>("title"), Url = urlProvider.GetUrl(serviceContext, e) }) .Where(e => !(string.IsNullOrEmpty(e.Title) || string.IsNullOrEmpty(e.Url))) .Select(e => new RelatedArticle(e.Title, e.Url)) .OrderBy(e => e.Title); return(View(new ArticleViewModel(kbarticle, relatedArticles))); }
private Func <OrganizationServiceContext, Entity, bool> GetSecurityAssertion(string portalName) { var cmsSecurityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName); if (!AdxstudioCrmConfigurationManager.GetCrmSection().ContentMap.Enabled) { return((serviceContext, entity) => cmsSecurityProvider.TryAssert(serviceContext, entity, CrmEntityRight.Read)); } var entityPermissionProvider = new CrmEntityPermissionProvider(portalName); return((serviceContext, entity) => { if (cmsSecurityProvider.TryAssert(serviceContext, entity, CrmEntityRight.Read)) { return true; } var permissionResult = entityPermissionProvider.TryAssert(serviceContext, entity); return permissionResult.RulesExist && permissionResult.CanRead; }); }
protected virtual bool TryAssertCrmEntityRight(OrganizationServiceContext context, Entity entity, CrmEntityRight right) { var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); return(securityProvider.TryAssert(context, entity, right)); }
public ICrmEntitySecurityProvider CreateCrmEntitySecurityProvider() { return(PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName)); }
private static bool Authorized(OrganizationServiceContext context, Entity entity) { var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(); return(securityProvider.TryAssert(context, entity, CrmEntityRight.Read)); }
public MultipleWebsiteCmsDataServiceQueryInterceptor(string portalName) { _securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(portalName); }
protected override void PerformDataBindingOfCrmEntity(Entity entity) { var portal = PortalCrmConfigurationManager.CreatePortalContext(PortalName); var context = portal.ServiceContext; entity = context.MergeClone(entity); if (ShowTitle) { Controls.Add(new Property { PropertyName = GetPropertyName(context, entity, "adx_title"), CssClass = "weblinkset-title", EditType = "text", DataItem = entity }); } if (ShowCopy) { Controls.Add(new Property { PropertyName = GetPropertyName(context, entity, "adx_copy"), CssClass = "weblinkset-copy", EditType = "html", DataItem = entity }); } var securityProvider = PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName); var weblinks = entity.GetRelatedEntities(context, "adx_weblinkset_weblink") .Where(e => securityProvider.TryAssert(context, e, CrmEntityRight.Read)) .OrderBy(weblink => weblink.GetAttributeValue <int?>("adx_displayorder")) .ToList(); var weblinkCount = weblinks.Count(); var listItems = weblinks.Select((weblink, index) => { var li = new HtmlGenericControl("li"); SetPositionalClassAttribute(li, weblinkCount, index); if (ItemTemplate != null) { var item = CreateItem(this, index, ListItemType.Item, true, weblink); Controls.Remove(item); li.Controls.Add(item); } else { li.Controls.Add(GetHyperLinkForWebLink(weblink)); if (ShowLinkDescriptions) { var description = new HtmlGenericControl("div"); description.Controls.Add(new Property { PropertyName = GetPropertyName(context, weblink, "adx_description"), DataItem = weblink, Literal = true }); if (!string.IsNullOrEmpty(DescriptionCssClass)) { description.Attributes["class"] = DescriptionCssClass; } li.Controls.Add(description); } } return(li); }); var container = new HtmlGenericControl("div"); var containerCssClasses = new List <string> { "weblinkset-weblinks" }; Controls.Add(container); if (listItems.Any()) { var list = new HtmlGenericControl("ul"); foreach (var li in listItems) { list.Controls.Add(li); } container.Controls.Add(list); } if (Editable) { containerCssClasses.Add("xrm-entity"); containerCssClasses.Add("xrm-editable-{0}".FormatWith(entity.LogicalName)); if (HasEditPermission(entity)) { var metadataProvider = PortalCrmConfigurationManager.CreateDependencyProvider(PortalName).GetDependency <ICrmEntityEditingMetadataProvider>(); metadataProvider.AddEntityMetadata(PortalName, this, container, entity); this.RegisterClientSideDependencies(); } } container.Attributes["class"] = string.Join(" ", containerCssClasses.ToArray()); }
private bool ValidateCmsSecurityProvider(OrganizationServiceContext serviceContext, CrmEntitySearchResult result) { return(PortalCrmConfigurationManager.CreateCrmEntitySecurityProvider(PortalName) .TryAssert(serviceContext, result.Entity, CrmEntityRight.Read)); }