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">&lt;?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-&gt;load(NULL)<br>#2 /app/application/web/modules/contrib/book/src/Controller/RouteAccessController.php(54): Drupal\book\Controller\RouteAccessController-&gt;__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-&gt;getInstanceFromDefinition('\\Drupal\\book\\Co...')<br>#5 /app/application/web/core/lib/Drupal/Core/Access/CustomAccessCheck.php(74): Drupal\Core\Utility\CallableResolver-&gt;getCallableFromDefinition('\\Drupal\\book\\Co...')<br>#6 [internal function]: Drupal\Core\Access\CustomAccessCheck-&gt;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-&gt;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-&gt;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-&gt;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-&gt;checkAccess(Object(Symfony\Component\HttpFoundation\Request))<br>#12 /app/application/web/core/lib/Drupal/Core/Routing/AccessAwareRouter.php(152): Drupal\Core\Routing\AccessAwareRouter-&gt;matchRequest(Object(Symfony\Component\HttpFoundation\Request))<br>#13 /app/application/web/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUserAdmin.php(140): Drupal\Core\Routing\AccessAwareRouter-&gt;match('/node/113/child...')<br>#14 /app/application/web/core/modules/user/src/Plugin/LanguageNegotiation/LanguageNegotiationUserAdmin.php(106): Drupal\user\Plugin\LanguageNegotiation\LanguageNegotiationUserAdmin-&gt;isAdminPath(Object(Symfony\Component\HttpFoundation\Request))<br>#15 /app/application/web/core/modules/language/src/LanguageNegotiator.php(197): Drupal\user\Plugin\LanguageNegotiation\LanguageNegotiationUserAdmin-&gt;getLangcode(Object(Symfony\Component\HttpFoundation\Request))<br>#16 /app/application/web/core/modules/language/src/LanguageNegotiator.php(137): Drupal\language\LanguageNegotiator-&gt;negotiateLanguage('language_interf...', 'language-user-a...')<br></span><span style="color: #0000BB">?&gt;</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