src/Security/FcSisetuVoter.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Entity\FcmFoodSisetuGroupSisetu;
  4. use App\Entity\SfGuardUser;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Doctrine\ORM\Query\Expr\Select;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\RequestStack;
  10. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  11. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  12. use Symfony\Component\Security\Core\Security;
  13. use function PHPUnit\Framework\isNull;
  14. /**
  15.  * 施設IDがユーザーの対象の施設IDじゃなければエラー
  16.  * 
  17.  * <code>
  18.  * $this->isGranted("fc.user_sisetu", $request->get('sisetu_id') )
  19.  * </code>
  20.  * 
  21.  */
  22. class FcSisetuVoter extends Voter
  23. {
  24.     private $security;
  25.     private $entityManager;
  26.     private $request;
  27.     public function __construct(Security $securityEntityManagerInterface $entityManagerRequestStack $request)
  28.     {
  29.         $this->security $security;
  30.         $this->entityManager $entityManager;
  31.         $this->request $request->getCurrentRequest();
  32.     }
  33.     /**
  34.      * gアトリビュートがfc.user_sisetuのものが対象
  35.      * 
  36.      */
  37.     protected function supports(string $attribute$subject)
  38.     {
  39.         return $attribute === "fc.user_sisetu";
  40.     }
  41.     /**
  42.      * チェック処理
  43.      * 
  44.      * @param string $attribute
  45.      * @param int $sisetu_id 施設ID
  46.      */
  47.     protected function voteOnAttribute(string $attribute$sisetu_idTokenInterface $token): bool
  48.     {
  49.         $user $token->getUser();
  50.         /** @var SfGuardUser $user */
  51.         //TODO 対象施設以外はfalse
  52.         $result $this->entityManager->createQueryBuilder()
  53.             ->select('fsgs')
  54.             ->from(FcmFoodSisetuGroupSisetu::class, 'fsgs')
  55.             ->where('fsgs.foodSisetuGroup in (:fsg_id) and fsgs.foodSisetu = :fs_id')
  56.             ->setParameters(['fsg_id' => $user->getFoodSisetuGroupIds(), 'fs_id' => $sisetu_id])
  57.             ->getQuery()->getResult();
  58.         if (!$result || count($result) == 0) {
  59.             return false;
  60.         }
  61.         return true;
  62.     }
  63. }