src/Security/Voter/User/BlogEntryVoter.php line 15

Open in your IDE?
  1. <?php
  2. /*
  3.  * Author: Dominik Piekarski <code@dompie.de>
  4.  * Created at: 2021/11/12 12:40
  5.  */
  6. declare(strict_types=1);
  7. namespace App\Security\Voter\User;
  8. use App\Entity\BlogEntry;
  9. use App\Security\ApiUser;
  10. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  11. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  12. class BlogEntryVoter extends Voter
  13. {
  14.     public const PERMISSION_MANAGE 'manage';
  15.     public const PERMISSION_VIEW_UNPUBLISHED 'view_unpublished';
  16.     protected function supports(string $attribute$subject): bool
  17.     {
  18.         return $subject instanceof BlogEntry
  19.             && in_array($attribute, [
  20.                 self::PERMISSION_MANAGE,
  21.                 self::PERMISSION_VIEW_UNPUBLISHED,
  22.             ]);
  23.     }
  24.     /**
  25.      * @param BlogEntry $subject
  26.      */
  27.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  28.     {
  29.         /** @var ApiUser $user */
  30.         $user $token->getUser();
  31.         if ($user->getIsAdmin()) {
  32.             return true;
  33.         }
  34.         if (!$user->getIsAmateur()) {
  35.             return false;
  36.         }
  37.         switch ($attribute) {
  38.             case self::PERMISSION_VIEW_UNPUBLISHED:
  39.             case self::PERMISSION_MANAGE:
  40.                 return $subject->getMember()->getId() === $user->getMember()->getId();
  41.         }
  42.         return false;
  43.     }
  44. }