diff --git a/src/ParagraphAccessControlHandler.php b/src/ParagraphAccessControlHandler.php
index 2946808..14ce3f2 100644
--- a/src/ParagraphAccessControlHandler.php
+++ b/src/ParagraphAccessControlHandler.php
@@ -6,6 +6,7 @@ use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityAccessControlHandler;
 use Drupal\Core\Entity\EntityHandlerInterface;
 use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Access\AccessResult;
@@ -67,7 +68,64 @@ class ParagraphAccessControlHandler extends EntityAccessControlHandler implement
       $operation = ($operation == 'delete') ? 'update' : $operation;
       // Library items have no support for parent entity access checking.
       if ($paragraph->getParentEntity()->getEntityTypeId() != 'paragraphs_library_item') {
-        $parent_access = $paragraph->getParentEntity()->access($operation, $account, TRUE);
+        // By default, the most recent revision ID of the parent is returned.
+        // In cases where content moderation is used an both a published current
+        // revision and a draft latest revision are present we will need to look
+        // up the correct revision ID of the parent block where our paragraph's
+        // revision is referenced.
+        $parent_with_revision = FALSE;
+
+        if ($operation == 'view') {
+          $parent_entity = $paragraph->getParentEntity();
+
+          $parent_entity_type_id = $parent_entity->getEntityTypeId();
+          // Make sure our parent is of the 'block_content' or 'paragraph' type.
+          // @todo: what is the best way to make this entity type agnostic? We're
+          // just interested in getting the correct revision ID.
+          if ($parent_entity_type_id == 'block_content' || $parent_entity_type_id == 'paragraph') {
+            // Set variables for paragraph ids & fields.
+            $paragraph_rid = $paragraph->getLoadedRevisionId();
+            $paragraph_id = $paragraph->id();
+            $paragraph_target_revision_id = $paragraph->parent_field_name->value . '.target_revision_id';
+            $paragraph_target_id = $paragraph->parent_field_name->value . '.target_id';
+
+            // Look up the paragraph's parent entity.
+            $entity_type_manager = \Drupal::entityTypeManager();
+            $target_entity_storage = $entity_type_manager->getStorage($parent_entity_type_id);
+
+            // Query the parent block_content and paragraph revisions that contain
+            // the currently loaded paragraph at it's given revision id.
+            $revision_ids = $target_entity_storage
+              ->getQuery()
+              ->allRevisions()
+              ->condition($paragraph_target_revision_id, $paragraph_rid)
+              ->condition($paragraph_target_id, $paragraph_id)
+              ->execute();
+
+            // @todo: find a better way to get the block_content revision ID from
+            // the published current revision. For now assume the first item is
+            // the one we're looking for, this should normally only return one
+            // value in the array, will need to modify this if there are scenarios
+            // where multiple values are returned.
+
+            if ($revision_ids) {
+              $parent_revision_id = key($revision_ids);
+
+              // Load the parent block with a specific version ID from above to
+              // pass on to the permission check.
+              if ($parent_revision_id) {
+                $parent_with_revision = \Drupal::entityTypeManager()
+                  ->getStorage($parent_entity_type_id)
+                  ->loadRevision($parent_revision_id);
+              }
+            }
+          }
+        }
+
+        // If the $parent_with_revision is empty, fetch the parent via $paragraph->getParentEntity.
+        $parent_access = $parent_with_revision ?
+          $parent_with_revision->access($operation, $account, TRUE) :
+          $paragraph->getParentEntity()->access($operation, $account, TRUE);
         $access_result = $access_result->andIf($parent_access);
       }
     }
