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