src/Security/SimpleVoter.php line 12

Open in your IDE?
  1. <?php
  2. //----------------------------------------------------------------------
  3. // src/Security/SimpleVoter.php
  4. //----------------------------------------------------------------------
  5. namespace App\Security;
  6. use App\Entity\Access;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. class SimpleVoter extends Voter
  10. {
  11.     //--------------------------------------------------------------------------------
  12.     const OPEN_SESAME "open_sesame";
  13.     //--------------------------------------------------------------------------------
  14.     const ACCESS_COMMONPLACE "access_commonplace";
  15.     const ACCESS_BLUEPRINT "access_blueprint";
  16.     const ACCESS_BUDGET "access_budget";
  17.     const ACCESS_KEEP "access_keep";
  18.     const ACCESS_READING "access_reading";
  19.     const ACCESS_TRACKING "access_tracking";
  20.     const ACCESS_VEHICLE "access_vehicle";
  21.     //--------------------------------------------------------------------------------
  22.     const ACCESS_GLOBALS = array(
  23.         self::OPEN_SESAME,
  24.         self::ACCESS_COMMONPLACE,
  25.         self::ACCESS_BLUEPRINT,
  26.         self::ACCESS_BUDGET,
  27.         self::ACCESS_KEEP,
  28.         self::ACCESS_READING,
  29.         self::ACCESS_TRACKING,
  30.         self::ACCESS_VEHICLE,
  31.     );
  32.     //--------------------------------------------------------------------------------
  33.     protected function supports(string $attribute$subject): bool
  34.     {
  35.         // if the attribute isn't one we support, return false
  36.         if (!in_array($attributeself::ACCESS_GLOBALS))
  37.         {
  38.             return false;
  39.         }
  40.         // only vote on Post objects
  41.         // if (!$subject instanceof Post)
  42.         // {
  43.         //     return false;
  44.         // }
  45.         return true;
  46.     }
  47.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  48.     {
  49.         $user $token->getUser();
  50.         if (!$user instanceof Access)
  51.         {
  52.             // the user must be logged in; if not, deny access
  53.             return false;
  54.         }
  55.         // The user must be the owner of the object
  56.         if ($subject !== null)
  57.         {
  58.             $owner $subject->getOwner();
  59.             if ($owner === null)
  60.                 return false;
  61.             if (!$owner->equals($user))
  62.                 return false;
  63.         }
  64.         switch ($attribute)
  65.         {
  66.             case self::OPEN_SESAME:
  67.                 return $this->canOpenSesame($user);
  68.             case self::ACCESS_COMMONPLACE:
  69.                 return $this->canAccessCommonplace($user$subject);
  70.             case self::ACCESS_BLUEPRINT:
  71.                 return $this->canAccessBlueprint($user$subject);
  72.             case self::ACCESS_BUDGET:
  73.                 return $this->canAccessBudget($user$subject);
  74.             case self::ACCESS_KEEP:
  75.                 return $this->canAccessKeep($user$subject);
  76.             case self::ACCESS_READING:
  77.                 return $this->canAccessReading($user$subject);
  78.             case self::ACCESS_TRACKING:
  79.                 return $this->canAccessTracking($user$subject);
  80.             case self::ACCESS_VEHICLE:
  81.                 return $this->canAccessVehicle($user$subject);
  82.         }
  83.         throw new \LogicException('This code should not be reached!');
  84.     }
  85.     private function canOpenSesame(Access $user): bool
  86.     {
  87.         if ($user->getId() === 2)
  88.         {
  89.             return true;
  90.         }
  91.         return false;
  92.     }
  93.     private function canAccessCommonplace(Access $user$subject): bool
  94.     {
  95.         return true;
  96.     }
  97.     private function canAccessBlueprint(Access $user$subject): bool
  98.     {
  99.         return true;
  100.     }
  101.     private function canAccessBudget(Access $user$subject): bool
  102.     {
  103.         return true;
  104.     }
  105.     private function canAccessKeep(Access $user$subject): bool
  106.     {
  107.         return true;
  108.     }
  109.     private function canAccessReading(Access $user$subject): bool
  110.     {
  111.         return true;
  112.     }
  113.     private function canAccessTracking(Access $user$subject): bool
  114.     {
  115.         return true;
  116.     }
  117.     private function canAccessVehicle(Access $user$subject): bool
  118.     {
  119.         return true;
  120.     }
  121. }