src/Security/Voter/PermissionVoter.php line 11

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  4. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  5. use Symfony\Component\Security\Core\User\UserInterface;
  6. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  7. class PermissionVoter extends Voter
  8. {
  9.     private $session;
  10.     public function __construct(SessionInterface $sessionInterface)
  11.     {
  12.         $this->session $sessionInterface;
  13.     }
  14.     protected function supports($attribute$subject)
  15.     {
  16.         // replace with your own logic
  17.         // https://symfony.com/doc/current/security/voters.html
  18.         $permission $this->session->get("PERMISSION");
  19.         if (!$permission)
  20.             $permission = array();
  21.         if ($attribute == "pat_") return true;
  22.         return in_array($attribute$permission);
  23.     }
  24.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  25.     {
  26.         $permission $this->session->get("PERMISSION");
  27.         $user $token->getUser();
  28.         // if the user is anonymous, do not grant access
  29.         if (!$user instanceof UserInterface) {
  30.             return false;
  31.         }
  32.         // ... (check conditions and return true to grant permission) ...
  33.         switch ($attribute) {
  34.             case 'pat_':
  35.                 $matches  preg_grep('/^pat_(\w+)/i'$permission);
  36.                 if ($matches)
  37.                     return true;
  38.                 else return false;
  39.                 // logic to determine if the user can EDIT
  40.                 // return true or false
  41.                 break;
  42.             case 'POST_VIEW':
  43.                 // logic to determine if the user can VIEW
  44.                 // return true or false
  45.                 break;
  46.         }
  47.         if (!$permission)
  48.             $permission = array();
  49.         return in_array($attribute$permission);
  50.         return false;
  51.     }
  52. }