title: Reload user role after change without re-logging
body: <p>How to refresh logged in user role e.g. when it has been changed by admin user? I've found the <code>always_authenticate_before_granting</code> security option (it's not included in Symfony 4 documentation) and set it to <code>true</code>.</p>
  <p>security.yaml:</p>
  <pre><code>security:
      always_authenticate_before_granting: true
      encoders:
          App\Entity\Main\User:
              algorithm: bcrypt
  
      providers:
          app_user_provider:
              entity:
                  class: App\Entity\Main\User
                  property: email
      role_hierarchy:
          ROLE_ADMIN:       ROLE_USER
      firewalls:
          dev:
              pattern: ^/(_(profiler|wdt)|css|images|js)/
              security: false
          main:
              anonymous: ~
              guard:
                  authenticators:
                      - App\Security\LoginFormAuthenticator
              form_login:
                  login_path: login
                  check_path: login
              logout:
                  path: logout
                  target: homepage
              remember_me:
                  secret:   '%kernel.secret%'
                  path:     /
      access_control:
          - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
          - { path: ^/.*, roles: ROLE_USER }
  </code></pre>
  <p>but it doesn't take effect.</p>
  <h2>UPDATE</h2>
  <p>I've created onRequest subscriber:</p>
  <pre><code>class RequestSubscriber implements EventSubscriberInterface
  {
      private $tokenStorage;
  
      public function __construct(TokenStorageInterface $tokenStorage)
      {
          $this-&gt;tokenStorage = $tokenStorage;
      }
  
      public static function getSubscribedEvents(): array
      {
          return [
              KernelEvents::REQUEST =&gt; 'onRequest'
          ];
      }
  
      public function onRequest(GetResponseEvent $event): void
      {
          if (!$event-&gt;isMasterRequest()) {
              return;
          }
  
          if(!$token = $this-&gt;tokenStorage-&gt;getToken()) return;
  
          $sessionUser = $token-&gt;getUser();
  
          if ($sessionUser instanceof User) {
              $this-&gt;tokenStorage-&gt;setToken(new PostAuthenticationGuardToken($sessionUser, 'main', $sessionUser-&gt;getRoles()));
          }
      }
  }
  </code></pre>
  <p>and now I can refresh the updated roles on every request, but comparing sessionUser to databaseUser is pointless, because the sessionUser always contains newly updated roles, though in Symfony Profiler &gt; Security Token are listed the old ones (in case when I don't set the new token, of course).</p>