/// <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);
        }
Example #2
0
        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;
        }
Example #4
0
        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);
        }