RouteAccessController is unable to load the book node on mulitilingual sites
>>> [!note] Migrated issue
<!-- Drupal.org comment -->
<!-- Migrated from issue #3538587. -->
Reported by: [codebymikey](https://www.drupal.org/user/3573206)
Related to !103 !104
>>>
<h3 id="summary-problem-motivation">Problem/Motivation</h3>
<p>The <code>Cannot load the "node" entity with NULL ID.</code> assertion is thrown in the constructor of the controller.</p>
<div class="codeblock">
<pre><span style="color: #000000"><span style="color: #0000BB"><?php<br></span><span style="color: #FF8000">#0 /app/application/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php(261): assert(false, 'Cannot load the...')<br>#1 /app/application/web/modules/contrib/book/src/Controller/RouteAccessController.php(43): Drupal\Core\Entity\EntityStorageBase->load(NULL)<br>#2 /app/application/web/modules/contrib/book/src/Controller/RouteAccessController.php(54): Drupal\book\Controller\RouteAccessController->__construct(Object(Drupal\book\ProxyClass\BookManager), Object(Drupal\Core\Routing\CurrentRouteMatch))<br>#3 /app/application/web/core/lib/Drupal/Core/DependencyInjection/ClassResolver.php(41): Drupal\book\Controller\RouteAccessController::create(Object(Drupal\Core\DependencyInjection\Container))<br>#4 /app/application/web/core/lib/Drupal/Core/Utility/CallableResolver.php(100): Drupal\Core\DependencyInjection\ClassResolver->getInstanceFromDefinition('\\Drupal\\book\\Co...')<br>#5 /app/application/web/core/lib/Drupal/Core/Access/CustomAccessCheck.php(74): Drupal\Core\Utility\CallableResolver->getCallableFromDefinition('\\Drupal\\book\\Co...')<br>#6 [internal function]: Drupal\Core\Access\CustomAccessCheck->access(Object(Symfony\Component\Routing\Route), Object(Drupal\Core\Routing\RouteMatch), Object(Drupal\Core\Session\AccountProxy), Object(Symfony\Component\HttpFoundation\Request))<br>#7 /app/application/web/core/lib/Drupal/Core/Access/AccessManager.php(160): call_user_func_array(Array, Array)<br>#8 /app/application/web/core/lib/Drupal/Core/Access/AccessManager.php(136): Drupal\Core\Access\AccessManager->performCheck('access_check.cu...', Object(Drupal\Component\Utility\ArgumentsResolver))<br>#9 /app/application/web/core/lib/Drupal/Core/Access/AccessManager.php(113): Drupal\Core\Access\AccessManager->check(Object(Drupal\Core\Routing\RouteMatch), Object(Drupal\Core\Session\AccountProxy), Object(Symfony\Component\HttpFoundation\Request), true)<br>#10 /app/application/web/core/lib/Drupal/Core/Routing/AccessAwareRouter.php(109): Drupal\Core\Access\AccessManager->checkRequest(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Session\AccountProxy), true)<br>#11 /app/application/web/core/lib/Drupal/Core/Routing/AccessAwareRouter.php(94): Drupal\Core\Routing\AccessAwareRouter->checkAccess(Object(Symfony\Component\HttpFoundation\Request))<br>#12 /app/application/web/core/lib/Drupal/Core/Routing/AccessAwareRouter.php(152): Drupal\Core\Routing\AccessAwareRouter->matchRequest(Object(Symfony\Component\HttpFoundation\Request))<br>#13 /app/application/web/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUserAdmin.php(140): Drupal\Core\Routing\AccessAwareRouter->match('/node/113/child...')<br>#14 /app/application/web/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUserAdmin.php(106): Drupal\user\Plugin\LanguageNegotiation\LanguageNegotiationUserAdmin->isAdminPath(Object(Symfony\Component\HttpFoundation\Request))<br>#15 /app/application/web/core/modules/language/src/LanguageNegotiator.php(197): Drupal\user\Plugin\LanguageNegotiation\LanguageNegotiationUserAdmin->getLangcode(Object(Symfony\Component\HttpFoundation\Request))<br>#16 /app/application/web/core/modules/language/src/LanguageNegotiator.php(137): Drupal\language\LanguageNegotiator->negotiateLanguage('language_interf...', 'language-user-a...')<br></span><span style="color: #0000BB">?></span></span></pre></div>
<p>In particular if the user has <a href="https://git.drupalcode.org/project/drupal/-/blob/06aeda30/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUserAdmin.php#L106">a preferred admin language code</a>.</p>
<h4 id="summary-steps-reproduce">Steps to reproduce</h4>
<p>1. Have a user with the <code>access administration pages</code> or <code>view the administration theme</code> permission.<br>
2. Give them a preferred language code.<br>
3. Attempt to access the <code>/node/{node}/child-ordering</code> route.</p>
<h3 id="summary-proposed-resolution">Proposed resolution</h3>
<p><del>Add appropriate checks to see that the <code>node</code> parameter is an integer, as well as lazy load the node entity from the route match object passed into the callbacks.</del></p>
<p>Let the argument resolver inject the relevant node object into the access callback rather than loading it directly.</p>
<h3 id="summary-remaining-tasks">Remaining tasks</h3>
<p>Provide issue fork.</p>
<h3 id="summary-ui-changes">User interface changes</h3>
<p>N/A</p>
<h3 id="summary-api-changes">API changes</h3>
<p>N/A</p>
<h3 id="summary-data-model-changes">Data model changes</h3>
issue