Show/hide menu link based on changing custom $tempStore value I'd like to show/hide a main-menu link based on a $tempStore variable the user can set and modify during their session, i.e. 


user sets $tempStore['vlaue'] = 0; --> menu link is hidden 
user sets $tempStore['value'] = 1; --> menu link is shown. 


The menu link is provided by a view (page). What I started to do is to implement my own custom RouteSubscriber which adds a custom access check  (which is defined as a service in mymodule.service.yml) to the view. The custom access check in myCustomAccessCheck.php basically does the following

   ...
   $value = $tempstore-&gt;get('value');
   return AccessResultAllowed::allowedIf($value == 1);
   ...


Apparently Drupal by default hides all menu links that the user does not have access to, so this approach should work (which it actually does!). However, caching is a problem, i.e. when the user changes the value, the link is shown/hidden only after a cache-rebuild.

Now my question: 


Is there a better/more elegant approach to do this? (I could not find any)
If not, can I use some hook to add my custom cache tag to the menu-link? (the view itself already has this cache tag, but the provided menu link does not respond to it)
Is it "better" to make a view-block instead of view-page, using a hook to add the custom cache tag to the block and add the block to the menu via *.links.menu.yml to have more control over the behavior?
You can try to add the custom cache tag to the access result:

return AccessResult::allowed()-&gt;addCacheTags(['custom_cache_tag']);
return AccessResult::forbidden()-&gt;addCacheTags(['custom_cache_tag']);