public ActionResult ProductDetails(int productId, string attributes) { var product = _productService.GetProductById(productId); if (product == null || product.Deleted) { return(HttpNotFound()); } //Is published? //Check whether the current user has a "Manage catalog" permission //It allows him to preview a product before publishing if (!product.Published && !_services.Permissions.Authorize(StandardPermissionProvider.ManageCatalog)) { return(HttpNotFound()); } //ACL (access control list) if (!_aclService.Authorize(product)) { return(HttpNotFound()); } //Store mapping if (!_storeMappingService.Authorize(product)) { return(HttpNotFound()); } //visible individually? if (!product.VisibleIndividually) { //is this one an associated products? var parentGroupedProduct = _productService.GetProductById(product.ParentGroupedProductId); if (parentGroupedProduct != null) { return(RedirectToRoute("Product", new { SeName = parentGroupedProduct.GetSeName() })); } else { return(HttpNotFound()); } } //prepare the model var selectedAttributes = new FormCollection(); selectedAttributes.ConvertAttributeQueryData(_productAttributeParser.DeserializeQueryData(attributes), product.Id); var model = _helper.PrepareProductDetailsPageModel(product, selectedAttributes: selectedAttributes); //save as recently viewed _recentlyViewedProductsService.AddProductToRecentlyViewedList(product.Id); //activity log _services.CustomerActivity.InsertActivity("PublicStore.ViewProduct", T("ActivityLog.PublicStore.ViewProduct"), product.Name); return(View(model.ProductTemplateViewPath, model)); }