public ActionResult Product(int productId, string attributes) { var product = _productService.GetProductById(productId); if (product == null || product.Deleted) return RedirectToRoute("HomePage"); //Is published? //Check whether the current user has a "Manage catalog" permission //It allows him to preview a product before publishing if (!product.Published && !_permissionService.Authorize(StandardPermissionProvider.ManageCatalog)) return RedirectToRoute("HomePage"); //ACL (access control list) if (!_aclService.Authorize(product)) return RedirectToRoute("HomePage"); //Store mapping if (!_storeMappingService.Authorize(product)) return RedirectToRoute("HomePage"); //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 RedirectToRoute("HomePage"); } } //prepare the model var selectedAttributes = new FormCollection(); selectedAttributes.ConvertQueryData(_productAttributeParser.DeserializeQueryData(attributes), product.Id); var model = 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); }