diff --git a/permissions_by_term.module b/permissions_by_term.module
index 7a3b4fc..d89d2c8 100644
--- a/permissions_by_term.module
+++ b/permissions_by_term.module
@@ -403,7 +403,7 @@ function permissions_by_term_node_access(NodeInterface $node, $op, AccountInterf
   /* @var \Drupal\permissions_by_term\Service\AccessCheck $accessCheck */
   $accessCheck = \Drupal::service('permissions_by_term.access_check');
 
-  $accessCheck->dispatchDeniedEventOnRestricedAccess($node, $node->language()->getId());
+  return $accessCheck->dispatchDeniedEventOnRestricedAccess($node, $node->language()->getId());
 }
 
 /**
diff --git a/src/Service/AccessCheck.php b/src/Service/AccessCheck.php
index 1f3c335..ccae43c 100644
--- a/src/Service/AccessCheck.php
+++ b/src/Service/AccessCheck.php
@@ -226,15 +226,19 @@ class AccessCheck {
     return $result;
   }
 
-  public function dispatchDeniedEventOnRestricedAccess(Node $node, string $langcode): void {
+  public function dispatchDeniedEventOnRestricedAccess(Node $node, string $langcode) {
     if (!$this->canUserAccessByNode($node, false, $langcode)) {
-      $this->dispatchDeniedEvent($node->id());
+      return $this->dispatchDeniedEvent($node->id());
     }
+
+    return AccessResult::neutral();
   }
 
-  private function dispatchDeniedEvent($nodeId): void {
+  private function dispatchDeniedEvent($nodeId) {
     $accessDeniedEvent = new PermissionsByTermDeniedEvent($nodeId);
     $this->eventDispatcher->dispatch(PermissionsByTermDeniedEvent::NAME, $accessDeniedEvent);
+
+    return AccessResult::forbidden();
   }
 
   public function isAnyTaxonomyTermFieldDefinedInNodeType(string $nodeType) {
