[ self::APPLY_ALL_TRANSITIONS, ], ]; } protected function supports(string $attribute, $subject): bool { return self::APPLY_ALL_TRANSITIONS === $attribute && ($subject instanceof EntityWorkflowStep || $subject instanceof EntityWorkflow); } protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool { /** @var EntityWorkflowStep|EntityWorkflow $subject */ $entityWorkflow = $subject instanceof EntityWorkflowStep ? $subject->getEntityWorkflow() : $subject; if (!$this->accessDecisionManager->decide($token, [EntityWorkflowVoter::SEE], $entityWorkflow)) { return false; } $handler = $this->workflowManager->getHandler($entityWorkflow); $entity = $handler->getRelatedEntity($entityWorkflow); if (null === $entity) { return false; } $centers = $this->centerResolverManager->resolveCenters($entity); $reachableCenters = $this->authorizationHelper->getReachableCenters(self::APPLY_ALL_TRANSITIONS); foreach ($centers as $center) { if (in_array($center, $reachableCenters, true)) { return true; } } return false; } }