diff --git a/permissions_by_term.module b/permissions_by_term.module
index 1c1472f..b3183ba 100644
--- a/permissions_by_term.module
+++ b/permissions_by_term.module
@@ -436,7 +436,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 718d208..c83b2f0 100644
--- a/src/Service/AccessCheck.php
+++ b/src/Service/AccessCheck.php
@@ -253,18 +253,20 @@ class AccessCheck {
   /**
    * Dispatches an access denied event if the user cannot access the given node.
    */
-  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();
   }
 
   /**
    * Dispatches a custom access denied event for a given node.
    */
-  private function dispatchDeniedEvent($nodeId): void {
+  private function dispatchDeniedEvent($nodeId) {
     $accessDeniedEvent = new PermissionsByTermDeniedEvent($nodeId);
     $this->eventDispatcher->dispatch($accessDeniedEvent, PermissionsByTermDeniedEvent::NAME);
+    return AccessResult::forbidden();
   }
 
   /**
