public DefaultMenuLinkTreeManipulators::checkNodeAccess(array $tree)
Performs access checking for nodes in an optimized way.
This manipulator should be added before the generic ::checkAccess() one, because it provides a performance optimization for ::checkAccess().
Parameters
\Drupal\Core\Menu\MenuLinkTreeElement[] $tree: The menu link tree to manipulate.
Return value
\Drupal\Core\Menu\MenuLinkTreeElement[] The manipulated menu link tree.
File
- core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php, line 131
Class
- DefaultMenuLinkTreeManipulators
- Provides a couple of menu link tree manipulators.
Namespace
Drupal\Core\Menu
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public function checkNodeAccess( array $tree ) { $node_links = array (); $this ->collectNodeLinks( $tree , $node_links ); if ( $node_links ) { $nids = array_keys ( $node_links ); $query = $this ->queryFactory->get( 'node' ); $query ->condition( 'nid' , $nids , 'IN' ); // Allows admins to view all nodes, by both disabling node_access // query rewrite as well as not checking for the node status. The // 'view own unpublished nodes' permission is ignored to not require cache // entries per user. $access_result = AccessResult::allowed()->cachePerPermissions(); if ( $this ->account->hasPermission( 'bypass node access' )) { $query ->accessCheck(FALSE); } else { $access_result ->addCacheContexts([ 'user.node_grants:view' ]); $query ->condition( 'status' , NODE_PUBLISHED); } $nids = $query ->execute(); foreach ( $nids as $nid ) { foreach ( $node_links [ $nid ] as $key => $link ) { $node_links [ $nid ][ $key ]->access = $access_result ; } } } return $tree ; } |
Please login to continue.