vendor/contao/core-bundle/src/Security/Voter/MemberGroupVoter.php line 21

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of Contao.
  5.  *
  6.  * (c) Leo Feyer
  7.  *
  8.  * @license LGPL-3.0-or-later
  9.  */
  10. namespace Contao\CoreBundle\Security\Voter;
  11. use Contao\CoreBundle\Security\ContaoCorePermissions;
  12. use Contao\FrontendUser;
  13. use Contao\StringUtil;
  14. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  15. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  16. class MemberGroupVoter extends Voter
  17. {
  18.     protected function supports($attribute$subject): bool
  19.     {
  20.         return ContaoCorePermissions::MEMBER_IN_GROUPS === $attribute;
  21.     }
  22.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  23.     {
  24.         // Filter non-numeric values
  25.         $subject array_filter((array) $subject, static function ($val) { return (string) (int) $val === (string) $val; });
  26.         if (empty($subject)) {
  27.             return false;
  28.         }
  29.         $user $token->getUser();
  30.         if (!$user instanceof FrontendUser) {
  31.             return \in_array(-1array_map('intval'$subject), true);
  32.         }
  33.         $groups StringUtil::deserialize($user->groupstrue);
  34.         // No groups assigned
  35.         if (empty($groups)) {
  36.             return false;
  37.         }
  38.         return \count(array_intersect($subject$groups)) > 0;
  39.     }
  40. }