src/Security/Voter/UserSetupVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\User;
  4. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  5. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  6. use Symfony\Component\Validator\Validator\ValidatorInterface;
  7. class UserSetupVoter extends Voter {
  8. const SETUP_COMPLETE = 'setup-complete';
  9. private $validator;
  10. public function __construct(ValidatorInterface $validator)
  11. {
  12. $this->validator = $validator;
  13. }
  14. protected function supports($attribute, $subject)
  15. {
  16. if(!in_array($attribute, [self::SETUP_COMPLETE])){
  17. return false;
  18. }
  19. if(!$subject instanceof User){
  20. return false;
  21. }
  22. return true;
  23. }
  24. protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
  25. {
  26. $user = $token->getUser();
  27. if(!$user instanceof User){
  28. return false;
  29. }
  30. switch ($attribute) {
  31. case self::SETUP_COMPLETE:
  32. return $this->isSetupComplete($user);
  33. }
  34. throw new \LogicException('This code should not be reached!');
  35. }
  36. private function isSetupComplete(User $user){
  37. $errors = $this->validator->validate($user);
  38. if(empty($user->getCompany()) || empty($user->getAddress()) || empty($user->getWebsite())){
  39. return false;
  40. }
  41. return true;
  42. }
  43. }