public function testTokenAwareAuthorizationCheckerAndDrupalPermissionVoter()
 {
     // We are in Drupal, user with uid 1 can access everything
     $superUser = new User();
     $superUser->uid = 1;
     $superUser->roles = [1 => 1];
     $superToken = new UserToken();
     $superToken->setUser(new DrupalUser($superUser));
     // And anonymous pretty much nothing
     $dumbUser = new User();
     $dumbUser->uid = 0;
     $dumbUser->roles = [0 => 0];
     $dumbToken = new UserToken();
     $dumbToken->setUser(new DrupalUser($dumbUser));
     // We are working in a fully bootstrapped Drupal, in theory
     // the permission voter is setup, we can send isGranted() calls
     // using permission names: sending a non existing permission
     // will always return false for any user, but always true for
     // the user with uid 1 (Drupal core default behavior)
     $permission = 'a drupal permission that does not exists';
     $tokenStorage = new TokenStorage();
     $authenticationManager = new SecurityNullAuthenticationManager();
     $accessDecisionManager = new AccessDecisionManager([new DrupalPermissionVoter()]);
     $defaultAuthorizationChecker = new AuthorizationChecker($tokenStorage, $authenticationManager, $accessDecisionManager);
     $tokenAwareAuthorizationChecker = new TokenAwareAuthorizationChecker($defaultAuthorizationChecker, $accessDecisionManager);
     // First check results for the current user (should not be allowed)
     // Then the super user (should be allowed)
     $tokenStorage->setToken($superToken);
     $this->assertTrue($defaultAuthorizationChecker->isGranted($permission, null));
     $this->assertTrue($tokenAwareAuthorizationChecker->isGranted($permission, null));
     $this->assertTrue($tokenAwareAuthorizationChecker->isGranted($permission, null, $superUser));
     $this->assertFalse($tokenAwareAuthorizationChecker->isGranted($permission, null, $dumbUser));
     // And do the exact opposite
     $tokenStorage->setToken($dumbToken);
     $this->assertFalse($defaultAuthorizationChecker->isGranted($permission, null));
     $this->assertFalse($tokenAwareAuthorizationChecker->isGranted($permission, null));
     $this->assertTrue($tokenAwareAuthorizationChecker->isGranted($permission, null, $superUser));
     $this->assertFalse($tokenAwareAuthorizationChecker->isGranted($permission, null, $dumbUser));
 }
 /**
  * {@inheritdoc}
  */
 public function isGranted($attributes, $object = null, $user = null)
 {
     if (!$user) {
         return $this->authorizationChecker->isGranted($attributes, $object);
     }
     $token = null;
     if ($user instanceof TokenInterface) {
         $token = $user;
     } else {
         if ($user instanceof AccountInterface) {
             $token = new UserToken();
             $token->setUser(new DrupalUser($user));
         } else {
             $token = new UserToken();
             $token->setUser($user);
         }
     }
     if (!is_array($attributes)) {
         $attributes = [$attributes];
     }
     return $this->accessDecisionManager->decide($token, $attributes, $object);
 }