/// <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 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)); }
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); }
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); }