diff --git a/modules/product/commerce_product.module b/modules/product/commerce_product.module
index 7ed4474..0263749 100644
--- a/modules/product/commerce_product.module
+++ b/modules/product/commerce_product.module
@@ -290,6 +290,8 @@ function commerce_product_views_api() {
  * Implements hook_permission().
  */
 function commerce_product_permission() {
+
+  // First we need an admin permission.
   $permissions = array(
     'administer product types' => array(
       'title' => t('Administer product types'),
@@ -298,10 +300,75 @@ function commerce_product_permission() {
     ),
   );
 
+  // Get base product permisisons.
   $permissions += commerce_entity_access_permissions('commerce_product');
 
+  // Get the commerce product entity info.
+  $product_entity = entity_get_info('commerce_product');
+  // Shortcut to access plural product label.
+  $plural_label = $product_entity['permission labels']['plural'];
+
+  // Add permission to access any active product.
+  $permissions['view active commerce_product entity'] = array(
+    'title' => t('View active @entity_type of any type', array(
+      '@entity_type' => $plural_label,
+    )),
+  );
+
+  // Per-bundle view published permissions.
+  if (!empty($product_entity['entity keys']['bundle'])) {
+    // Loop through each product bundle.
+    foreach ($product_entity['bundles'] as $bundle_name => $bundle_info) {
+      // Add the bundle specific permission for active products.
+      $permissions['view active commerce_product entity of bundle ' . $bundle_name] = array(
+        'title' => t('View active %bundle @entity_type', array(
+            '@entity_type' => $plural_label,
+            '%bundle' => $bundle_info['label']
+          )
+        ),
+      );
+    }
+  }
+
+  // Return permissions array.
   return $permissions;
 }
+}
+
+/**
+ * Implements hook_commerce_entity_access_condition_commerce_product_alter().
+ */
+function commerce_product_commerce_entity_access_condition_commerce_product_alter(&$conditions, $context) {
+  $account = $context['account'];
+  $entity_type = $context['entity_type'];
+  $base_table = $context['base_table'];
+
+  // Get the entity type info array for the current access check.
+  $entity_info = entity_get_info($entity_type);
+
+  if (user_access('view active ' . $entity_type . ' entity', $account)) {
+    $conditions->condition($base_table . '.status', 1);
+  }
+  else {
+    $allowed_bundles = array();
+
+    foreach ($entity_info['bundles'] as $bundle_name => $bundle_info) {
+      // If the user has access to view active commerce_product entities of the current bundle...
+      if (user_access('view active ' . $entity_type . ' entity of bundle ' . $bundle_name, $account)) {
+        // Add a condition granting access if the entity specified by the view
+        // query is of the same bundle.
+        $allowed_bundles[] = $bundle_name;
+      }
+    }
+
+    if ($allowed_bundles) {
+      $conditions->condition(db_and()
+          ->condition($base_table . '.status', 1)
+          ->condition($base_table . '.' . $entity_info['entity keys']['bundle'], $allowed_bundles)
+      );
+    }
+  }
+}
 
 /**
  * Implements hook_enable().
@@ -603,6 +670,21 @@ function commerce_product_access($op, $product = NULL, $account = NULL) {
  * Implements hook_query_TAG_alter().
  */
 function commerce_product_query_commerce_product_access_alter(QueryAlterableInterface $query) {
+  // Get tables if they are available.
+  if (is_a($query, 'QueryAlterableInterface')
+        && method_exists($query, 'getTables')
+        && $all_tables = $query->getTables()) {
+
+    // Loop through available tables and check for a 'commerce_product' table.
+    foreach ($all_tables as $table) {
+      if (!empty($table['table']) && $table['table'] == 'commerce_product') {
+        // Check permissions leveraging the bas table of the commerce_product.
+        return commerce_entity_access_query_alter($query, 'commerce_product', $table['alias']);
+      }
+    }
+  }
+
+  // Check permissions without a base tbale defined.
   return commerce_entity_access_query_alter($query, 'commerce_product');
 }
 
