* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Workflow\EventListener; use Symfony\Component\Security\Core\Authentication\AuthenticationTrustResolverInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Component\Security\Core\Role\RoleHierarchyInterface; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Component\Workflow\Event\GuardEvent; use Symfony\Component\Workflow\Exception\InvalidTokenConfigurationException; /** * @author Grégoire Pineau */ class GuardListener { private $configuration; private $expressionLanguage; private $tokenStorage; private $authenticationChecker; private $trustResolver; private $roleHierarchy; private $validator; public function __construct($configuration, ExpressionLanguage $expressionLanguage, TokenStorageInterface $tokenStorage, AuthorizationCheckerInterface $authenticationChecker, AuthenticationTrustResolverInterface $trustResolver, RoleHierarchyInterface $roleHierarchy = null, ValidatorInterface $validator = null) { $this->configuration = $configuration; $this->expressionLanguage = $expressionLanguage; $this->tokenStorage = $tokenStorage; $this->authenticationChecker = $authenticationChecker; $this->trustResolver = $trustResolver; $this->roleHierarchy = $roleHierarchy; $this->validator = $validator; } public function onTransition(GuardEvent $event, $eventName) { if (!isset($this->configuration[$eventName])) { return; } if (!$this->expressionLanguage->evaluate($this->configuration[$eventName], $this->getVariables($event))) { $event->setBlocked(true); } } // code should be sync with Symfony\Component\Security\Core\Authorization\Voter\ExpressionVoter private function getVariables(GuardEvent $event) { $token = $this->tokenStorage->getToken(); if (null === $token) { throw new InvalidTokenConfigurationException(sprintf('There are no tokens available for workflow %s.', $event->getWorkflowName())); } if (null !== $this->roleHierarchy) { $roles = $this->roleHierarchy->getReachableRoles($token->getRoles()); } else { $roles = $token->getRoles(); } $variables = array( 'token' => $token, 'user' => $token->getUser(), 'subject' => $event->getSubject(), 'roles' => array_map(function ($role) { return $role->getRole(); }, $roles), // needed for the is_granted expression function 'auth_checker' => $this->authenticationChecker, // needed for the is_* expression function 'trust_resolver' => $this->trustResolver, // needed for the is_valid expression function 'validator' => $this->validator, ); return $variables; } } __halt_compiler();----SIGNATURE:----h4Gj/QvtYkXwO8fLgqn/zPFAUkdkd2mf28a4LwqbmZTmAKJTwvBjN/+ipGujzdE4nHsLZWjvNn+D+Qs8luFJxoE9nicLzaKSSUR0tlRM3DmS3PuiU9Sje5oI+qV5Ukhep4lVvoOW61mcjxDivKm7F6Sqv4rA7AmScwmeCT+OCU2MhJsC/Y8jYtxQ1bHUzdUw6Ned5Cd2xNkEAW3wh5Z2b1WFOPgu/BrEQJ+aLNcro3PbyZIIVR6QhHvJIt4GarEll5lrRwftTBaFrt8d/2FaGBOr8Wx2nV9n6X70Ov2N/m8MWs5C5xHxIDAT6s/xZpeD6G/i24e6h8eYCJDlMMHgcOKm7KCquOn6DV2NYJHD5UiCByYYir0gJFQfTQbEQE6MT0faipby0G+uzNUPbSpj8ysllensBFFVV6Hg3zJJ/vfYweOlP+hi8uu7MBblH1Rxe2wxbwrYtB9MDj9/wvGxmc4YWxCTzVfOl+EVlUm4E2D6WZfHMhY9Qy/d2Vt8eGQnTjcau3owoZ3RPwQExRC0PUKP6JvH7YvbYrsp7dUyyKd5iJTUlP1pYEl6vAdgmuV2yqBZd7M8UkO8mkioBokv7fY7pYisi2CBucZ3iJ/bYLH8v09bzMuuH4/sWjh8SUttBhGpy+300K2euNVbPNuND/Y/Rxw1I4wee9O0uRuGjJM=----ATTACHMENT:----MjAyODA5OTQyMjQ5Mjg0NCA4MTI2NzMwMDk4ODQ0NzUzIDEzOTIxMDUyNTM1NjkwMDU=