/// <summary> /// Here we modify the page response data to include only what we need and /// serialize it into a json object. /// </summary> private string CreateResponseJson(IPageResponseData pageResponseData) { string responseJson; // When using IPageBlockWithParentPageData and referencing the parent page we get a // Self referencing loop error. Rather than set this globally we ignore this specifically here var settings = _jsonSerializerSettingsFactory.Create(); settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; settings.StringEscapeHandling = StringEscapeHandling.EscapeHtml; bool isCustomEntityRoute = pageResponseData.Version is CustomEntityVersionRoute; bool hasEntityUpdatePermission = false; bool hasEntityPublishPermission = false; if (isCustomEntityRoute) { hasEntityUpdatePermission = _permissionValidationService.HasCustomEntityPermission <CustomEntityUpdatePermission>( pageResponseData.CustomEntityDefinition.CustomEntityDefinitionCode, pageResponseData.CofoundryAdminUserContext ); hasEntityPublishPermission = _permissionValidationService.HasCustomEntityPermission <CustomEntityPublishPermission>( pageResponseData.CustomEntityDefinition.CustomEntityDefinitionCode, pageResponseData.CofoundryAdminUserContext ); } else { hasEntityUpdatePermission = _permissionValidationService.HasPermission <PageUpdatePermission>(pageResponseData.CofoundryAdminUserContext); hasEntityPublishPermission = _permissionValidationService.HasPermission <PagePublishPermission>(pageResponseData.CofoundryAdminUserContext); } var responseObject = new { Page = pageResponseData.Page, PageRoutingInfo = pageResponseData.PageRoutingInfo, PageVersion = pageResponseData.PageVersion, IsCustomEntityRoute = isCustomEntityRoute, HasDraftVersion = pageResponseData.HasDraftVersion, Version = pageResponseData.Version, VisualEditorMode = pageResponseData.VisualEditorMode, CustomEntityDefinition = pageResponseData.CustomEntityDefinition, HasEntityUpdatePermission = hasEntityUpdatePermission, HasEntityPublishPermission = hasEntityPublishPermission }; responseJson = JsonConvert.SerializeObject(responseObject, settings); return(responseJson); }
public async Task <JsonResult> Get([FromQuery] DateTime start, [FromQuery] DateTime end) { var bookings = await BookingService.FindBookingsInInterval(new SearchBookingSummariesQuery { Start = start, End = end, IsCancelled = false }); var expandedBookingDays = bookings.SelectMany(b => b.ExpandDays()); IExecutionContext executionContext = await ExecutionContextFactory.CreateAsync(); bool hasEditAccess = PermissionValidationService.HasCustomEntityPermission <CustomEntityUpdatePermission>(BookingCustomEntityDefinition.DefinitionCode, executionContext.UserContext); var events = expandedBookingDays.Select(b => new CalendarEvent { start = b.Date, title = "Optaget", description = hasEditAccess ? $"#{b.Booking.BookingNumber} - {b.Booking.Purpose}" : null, booking_id = hasEditAccess ? b.Booking.Id : (int?)null }); return(new JsonResult(events)); }
public Task ExecuteAsync(Controller controller, PageActionRoutingState state) { var pageRoutingInfo = state.PageRoutingInfo; if (pageRoutingInfo == null) return Task.CompletedTask; if (state.InputParameters.IsEditingCustomEntity && (pageRoutingInfo.CustomEntityRoute == null || !state.IsCofoundryAdminUser || !_permissionValidationService.HasCustomEntityPermission<CustomEntityUpdatePermission>(pageRoutingInfo.CustomEntityRoute.CustomEntityDefinitionCode, state.CofoundryAdminUserContext)) ) { state.InputParameters.IsEditingCustomEntity = false; } return Task.CompletedTask; }
public async Task <IEnumerable <ISiteMapResource> > GetResourcesAsync() { var userContext = await _userContextService.GetCurrentContextAsync(); var resources = new List <SiteMapResource>(); if (!_permissionValidationService.HasPermission <PageReadPermission>(userContext)) { return(resources); } var pageRoutes = await _queryExecutor.ExecuteAsync(new GetAllPageRoutesQuery()); var allRules = await _queryExecutor.ExecuteAsync(new GetAllCustomEntityRoutingRulesQuery()); foreach (var pageRoute in pageRoutes.Where(p => p.IsPublished() && p.ShowInSiteMap)) { if (pageRoute.PageType == PageType.CustomEntityDetails) { if (_permissionValidationService.HasCustomEntityPermission <CustomEntityReadPermission>(pageRoute.CustomEntityDefinitionCode, userContext)) { var routesQuery = new GetCustomEntityRoutesByDefinitionCodeQuery(pageRoute.CustomEntityDefinitionCode); var allCustomEntityRoutes = await _queryExecutor.ExecuteAsync(routesQuery); var pageLocaleId = pageRoute.Locale != null ? pageRoute.Locale.LocaleId : (int?)null; foreach (var customEntityRoute in allCustomEntityRoutes .Where(r => r.Locale == null ? !pageLocaleId.HasValue : r.Locale.LocaleId == pageLocaleId)) { var resource = MapCustomEntityResource(pageRoute, customEntityRoute, allRules); if (resource != null) { resources.Add(resource); } } } } else { resources.Add(MapPageResource(pageRoute)); } } return(resources); }