diff --git a/modules/receipt/commerce_pos_receipt.module b/modules/receipt/commerce_pos_receipt.module
index babbc62..20f5b65 100644
--- a/modules/receipt/commerce_pos_receipt.module
+++ b/modules/receipt/commerce_pos_receipt.module
@@ -53,12 +53,16 @@ function commerce_pos_receipt_theme() {
 function commerce_pos_receipt_entity_operation(EntityInterface $entity) {
   $operations = [];
 
+  /** @var $entity \Drupal\commerce_order\Entity\OrderInterface */
   if ($entity->getEntityTypeId() == 'commerce_order') {
-    $operations['show_receipt'] = [
-      'title' => t('Show receipt'),
-      'url' => Url::fromRoute('commerce_pos_receipt.show', ['commerce_order' => $entity->id()]),
-      'weight' => 50,
-    ];
+    // @see \Drupal\commerce_pos_receipt\Controller\PrintController::checkAccess()
+    if ($entity->getPlacedTime() && \Drupal::currentUser()->hasPermission('administer commerce_order')) {
+      $operations['show_receipt'] = [
+        'title' => t('Show receipt'),
+        'url' => Url::fromRoute('commerce_pos_receipt.show', ['commerce_order' => $entity->id()]),
+        'weight' => 50,
+      ];
+    }
   }
 
   return $operations;
diff --git a/modules/receipt/commerce_pos_receipt.routing.yml b/modules/receipt/commerce_pos_receipt.routing.yml
index 6ab7a60..12e35bb 100644
--- a/modules/receipt/commerce_pos_receipt.routing.yml
+++ b/modules/receipt/commerce_pos_receipt.routing.yml
@@ -3,6 +3,7 @@ commerce_pos_receipt.ajax:
   defaults:
     _controller: '\Drupal\commerce_pos_receipt\Controller\PrintController::ajaxReceipt'
     _title: 'Order Receipt'
+    print_or_email: 'print'
   options:
     parameters:
       commerce_order:
@@ -22,7 +23,7 @@ commerce_pos_receipt.show:
       commerce_order:
         type: 'entity:commerce_order'
   requirements:
-    _permission: 'administer commerce_order'
+    _custom_access: '\Drupal\commerce_pos_receipt\Controller\PrintController::checkAccess'
 
 commerce_pos_receipt.settings:
   path: '/admin/commerce/config/pos/receipt'
diff --git a/modules/receipt/src/Controller/PrintController.php b/modules/receipt/src/Controller/PrintController.php
index c1000ad..46bed87 100644
--- a/modules/receipt/src/Controller/PrintController.php
+++ b/modules/receipt/src/Controller/PrintController.php
@@ -6,6 +6,7 @@ use Drupal\commerce_order\Entity\OrderInterface;
 use Drupal\commerce_pos_receipt\Ajax\CompleteOrderCommand;
 use Drupal\commerce_pos_receipt\Ajax\PrintReceiptCommand;
 use Drupal\commerce_price\Entity\Currency;
+use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Ajax\AjaxResponse;
 use Drupal\Core\Ajax\HtmlCommand;
 use Drupal\Core\Ajax\SettingsCommand;
@@ -193,4 +194,17 @@ class PrintController extends ControllerBase {
     }
   }
 
+  /**
+   * Checks if the receipt should be printable. The order needs to be placed.
+   *
+   * @param \Drupal\commerce_order\Entity\OrderInterface $commerce_order
+   *   The commerce order.
+   *
+   * @return \Drupal\Core\Access\AccessResultInterface
+   *   The access result.
+   */
+  public function checkAccess(OrderInterface $commerce_order) {
+    return AccessResult::allowedIf($this->currentUser()->hasPermission('administer commerce_order') && $commerce_order->getPlacedTime())->cachePerPermissions()->cacheUntilEntityChanges($commerce_order);
+  }
+
 }
