src/Security/Voter/TenancyVoter.php line 25

Open in your IDE?
  1. <?php
  2. /*
  3.  * To change this license header, choose License Headers in Project Properties.
  4.  * To change this template file, choose Tools | Templates
  5.  * and open the template in the editor.
  6.  */
  7. namespace App\Security\Voter;
  8. use App\Entity\JIT\Person;
  9. use App\Entity\JIT\Property;
  10. use App\Entity\JIT\Tenancy;
  11. use App\Entity\Security\User;
  12. use LogicException;
  13. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  14. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  15. use Symfony\Component\Security\Core\Security;
  16. /**
  17.  * Description of TenancyVoter
  18.  *
  19.  * @author NOUTCHEU Blaise
  20.  */
  21. class TenancyVoter extends Voter {
  22.     // these strings are just invented: you can use anything
  23.     const LIST = 'ROLE_JIT_TENANCY_INDEX';
  24.     const ADD 'ROLE_JIT_TENANCY_ADD';
  25.     const ADDBP 'ROLE_JIT_TENANCY_ADDBP';
  26.     const ADDBPP 'ROLE_JIT_TENANCY_ADDBPP';
  27.     const VIEW 'ROLE_JIT_TENANCY_VIEW';
  28.     const CLONE = 'ROLE_JIT_TENANCY_CLONE';
  29.     const EDIT 'ROLE_JIT_TENANCY_EDIT';
  30.     const DELETE 'ROLE_JIT_TENANCY_DELETE';
  31.     const ADDC 'ROLE_JIT_CHARGE_ADD2';
  32.     const PAY 'ROLE_JIT_TENANCY_PAY';
  33.     private $security;
  34.     public function __construct(Security $security) {
  35.         $this->security $security;
  36.     }
  37.     protected function supports(string $attribute$subject) {
  38.         // only a teacher can add tenancy on his subject
  39.         if (in_array($attribute, [
  40.                     self::LIST,
  41.                     self::ADD,
  42.                     self::ADDBP,
  43.                     self::ADDBPP,
  44.                     self::VIEW,
  45.                     self::CLONE,
  46.                     self::EDIT,
  47.                     self::DELETE,
  48.                     self::ADDC,
  49.                     self::PAY,
  50.                 ])) {
  51.             return true;
  52.         }
  53.         if (!in_array($attribute, [
  54. //                    self::VIEW,
  55.                 ])) {
  56.             return false;
  57.         }
  58.         // only vote on `Tenancy` objects
  59.         if (!$subject instanceof Tenancy) {
  60.             return false;
  61.         }
  62.         return true;
  63.     }
  64.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token) {
  65.         $user $token->getUser();
  66.         if (!$user instanceof User) {
  67.             // the user must be logged in; if not, deny access
  68.             return false;
  69.         }
  70.         // ROLE_JIT_TENANCY_MANAGE can do anything on tenancy! The power!
  71.         if ($this->security->isGranted('ROLE_MANAGER')) {
  72.             return true;
  73.         }
  74.         switch ($attribute) {
  75.             case self::LIST:
  76.                 return $this->canList($user);
  77.             case self::ADD:
  78.                 return $this->canAdd($user);
  79.             case self::ADDBP:
  80.                 return $this->canAddBP($subject$user);
  81.             case self::ADDBPP:
  82.                 return $this->canAddBPP($subject$user);
  83.             case self::VIEW:
  84.                 return $this->canView($subject$user);
  85.             case self::CLONE:
  86.                 return $this->canClone($subject$user);
  87.             case self::ADDC:
  88.             case self::EDIT:
  89.                 return $this->canEdit($subject$user);
  90.             case self::DELETE:
  91.                 return $this->canDelete($subject$user);
  92.         }
  93.         throw new LogicException('This code should not be reached!');
  94.     }
  95.     private function canList(User $user) {
  96.         return true;
  97.     }
  98.     private function canAdd(User $user) {
  99.         return true;
  100.     }
  101.     private function canAddBP(Person $personUser $user) {
  102.         return true;
  103.     }
  104.     private function canAddBPP(Property $propertyUser $user) {
  105.         return true;
  106.     }
  107.     
  108.     private function canView(Tenancy $tenancyUser $user) {
  109.         return true;
  110.     }
  111.     private function canClone(Tenancy $tenancyUser $user) {
  112.         return $this->canAdd($user) && $this->canView($tenancy$user);
  113.     }
  114.     private function canEdit(Tenancy $tenancyUser $user) {
  115.         //Uniquement le chef d'agence peut modifier une tenancyne
  116. //        if ($user->getMyAgencies()->contains($tenancy->getTenancy())) {
  117. //            return true;
  118. //        }
  119.         return $this->canView($tenancy$user);
  120.     }
  121.     private function canDelete(Tenancy $tenancyUser $user) {
  122.         //Uniquement le chef d'agence peut modifier une tenancyne
  123. //        if ($user->getMyAgencies()->contains($tenancy->getTenancy())) {
  124. //            return true;
  125. //        }
  126.         return $this->canView($tenancy$user);
  127.     }
  128. }