diff --git a/permissions_by_term.module b/permissions_by_term.module
index 32400f7..2734ff2 100644
--- a/permissions_by_term.module
+++ b/permissions_by_term.module
@@ -298,18 +298,21 @@ function permissions_by_term_node_grants(\Drupal\Core\Session\AccountInterface $
 /**
  * Implements hook_node_access().
  *
- * Forwards user by drupal_access_denied(); to an access denied page, if a
- * single restricted node is called.
- *
- * This hook is not fired if admin is logged in. Users with the
- * "bypass node access" permission may always view and edit content
- * through the administrative interface.
+ * Prevent access to nodes unless they are granted permissions by a term.
  */
 function permissions_by_term_node_access(NodeInterface $node, $op, AccountInterface $account) {
   /* @var \Drupal\permissions_by_term\Service\AccessCheck $accessCheck */
-  $accessCheck = \Drupal::service('permissions_by_term.access_check');
+  $permissions_by_term_access_check = \Drupal::service('permissions_by_term.access_check');
+
+  $access_result = AccessResult::forbidden("A term permission is required.");
 
-  $accessCheck->dispatchDeniedEventOnRestricedAccess($node->id(), $node->language()->getId());
+  if ($permissions_by_term_access_check->canUserAccessByNodeId($node->id(), $account->id(), $node->language()->getId())) {
+    $access_result = AccessResult::allowed();
+  }
+  
+  $access_result->cachePerPermissions();
+  
+  return $access_result;
 }
 
 /**
