diff --git a/workbench_moderation.module b/workbench_moderation.module
index b969db0..7fce254 100644
--- a/workbench_moderation.module
+++ b/workbench_moderation.module
@@ -143,9 +143,22 @@ function workbench_moderation_entity_view(array &$build, EntityInterface $entity
  * mandatory for any user that wants to moderate things.
  */
 function workbench_moderation_node_access(NodeInterface $entity, $operation, AccountInterface $account) {
-  return (!$entity->isPublished() && $operation == 'view')
-    ? AccessResult::allowedIfHasPermission($account, 'view any unpublished content')
-    : AccessResult::neutral();
+  /** @var \Drupal\workbench_moderation\ModerationInformationInterface $modinfo */
+  $moderation_info = Drupal::service('workbench_moderation.moderation_information');
+
+  if ($operation == 'view') {
+    return (!$entity->isPublished())
+      ? AccessResult::allowedIfHasPermission($account, 'view any unpublished content')
+      : AccessResult::neutral();
+  }
+  elseif ($operation == 'update' && $moderation_info->isModeratableEntity($entity) && $entity->moderation_information && $entity->moderation_information->target_id) {
+    /** @var \Drupal\workbench_moderation\StateTransitionValidation $transition_validation */
+    $transition_validation = \Drupal::service('workbench_moderation.state_transition_validation');
+
+    return $transition_validation->getValidTransitionTargets($entity, $account)
+      ? AccessResult::neutral()
+      : AccessResult::forbidden();
+  }
 }
 
 /**
