src/Security/Voter/CampaignsVoter.php line 15

Open in your IDE?
  1. <?php
  2. declare(strict_types 1);
  3. namespace App\Security\Voter;
  4. use App\Entity\Campaigns;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. use Symfony\Component\Security\Core\User\UserInterface;
  8. use App\Model\Constants\Modules;
  9. use App\Security\ACLManager;
  10. class CampaignsVoter extends Voter {
  11.     private $acl;
  12.     
  13.     public function __construct(ACLManager $acl) {
  14.         $this->acl $acl;
  15.     }
  16.     
  17.     protected function supports($attribute$subject) {
  18.         //replace with your own logic
  19.         //https://symfony.com/doc/current/security/voters.html
  20.         return in_array($attribute, ['EDIT_CAMPAIGN''GET_CAMPAIGN']) && $subject instanceof Campaigns;
  21.     }
  22.     
  23.     protected function voteOnAttribute($attribute$subjectTokenInterface $token) {
  24.         $user $token->getUser();
  25.         //if the user is anonymous, do not grant access
  26.         if (!$user instanceof UserInterface) {
  27.             return false;
  28.         }
  29.         
  30.         // ... (check conditions and return true to grant permission) ...
  31.         switch ($attribute) {
  32.       case 'EDIT_CAMPAIGN':
  33.       case 'GET_CAMPAIGN':
  34.                 //get access from database
  35.                 $hasAccess $this->acl->hasAccessToModule($userModules::COOP_REQUESTS);
  36.         
  37.                 if ($hasAccess) {
  38.                     return true;
  39.                 }
  40.                 
  41.                 return false;
  42.             break;
  43.         }
  44.         
  45.         throw new \Exception(sprintf('Unhandled attribute "%s"'$attribute));
  46.     }
  47. }