/// <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);
        }
Beispiel #2
0
        public Task <ICollection <AdminModule> > ExecuteAsync(GetPermittedAdminModulesQuery query, IExecutionContext executionContext)
        {
            var userContext = executionContext.UserContext;

            if (userContext == null || !userContext.IsCofoundryUser())
            {
                return(Task.FromResult <ICollection <AdminModule> >(new AdminModule[0]));
            }

            var modules = _moduleRegistrations
                          .SelectMany(r => r.GetModules())
                          .Where(r => _permissionValidationService.HasPermission(r.RestrictedToPermission, executionContext.UserContext))
                          .SetStandardOrdering()
                          .ToList();

            return(Task.FromResult <ICollection <AdminModule> >(modules));
        }
Beispiel #3
0
        public IEnumerable <AdminModule> Execute(GetPermittedAdminModulesQuery query, IExecutionContext executionContext)
        {
            var userContext = executionContext.UserContext;

            if (userContext == null || !userContext.IsCofoundryUser())
            {
                return(Enumerable.Empty <AdminModule>());
            }

            var modules = _moduleRegistrations
                          .SelectMany(r => r.GetModules())
                          .Where(r => _permissionValidationService.HasPermission(r.RestrictedToPermission, executionContext.UserContext))
                          .SetStandardOrdering()
                          .ToList();

            return(modules);
        }
Beispiel #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);
        }