src/Security/EntraRoleVoter.php line 9

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Repository\UtilisateurRepository;
  4. use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthUser;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
  7. class EntraRoleVoter implements VoterInterface
  8. {
  9. public function __construct(private UtilisateurRepository $utilisateurRepository)
  10. {
  11. }
  12. public function vote(TokenInterface $token, mixed $subject, array $attributes): int
  13. {
  14. $user = $token->getUser();
  15. if (!$user instanceof OAuthUser) {
  16. return self::ACCESS_ABSTAIN;
  17. }
  18. $email = $user->getUserIdentifier();
  19. $login = strtolower(explode('@', $email)[0]);
  20. $realUser = $this->utilisateurRepository->findOneBy(['login' => $login]);
  21. if (!$realUser) {
  22. return self::ACCESS_ABSTAIN;
  23. }
  24. $realRoles = $realUser->getRoles();
  25. foreach ($attributes as $attribute) {
  26. if ($attribute === 'IS_AUTHENTICATED_REMEMBERED' || in_array($attribute, $realRoles, true)) {
  27. return self::ACCESS_GRANTED;
  28. }
  29. }
  30. return self::ACCESS_ABSTAIN;
  31. }
  32. }