src/Service/SuperAdmin/Panel/AccessVoters/CustomerVoter.php line 9

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Service\SuperAdmin\Panel\AccessVoters;
  3. use Harmonizely\Model\UserInterface;
  4. use Harmonizely\Types\SuperAdmin\UserRole;
  5. use Harmonizely\Entity\SuperAdmin\UserEntity;
  6. class CustomerVoter extends AbstractVoter
  7. {
  8.     /**
  9.      * Resource name
  10.      */
  11.     const RESOURCE_NAME 'customer';
  12.     /**
  13.      * View customers
  14.      */
  15.     const VIEW 'customer_view';
  16.     /**
  17.      * Enable user
  18.      */
  19.     const ENABLE 'customer_enable';
  20.     /**
  21.      * Disabled user
  22.      */
  23.     const DISABLE 'customer_disable';
  24.     /**
  25.      * Delete user
  26.      */
  27.     const DELETE 'customer_delete';
  28.     /**
  29.      * Delete 2 fa
  30.      */
  31.     const DELETE_2FA 'customer_delete_2fa';
  32.     /**
  33.      * Login as customer
  34.      */
  35.     const LOGIN 'customer_login';
  36.     /**
  37.      * Return resource name
  38.      *
  39.      * @return string
  40.      */
  41.     function getResourceName(): string
  42.     {
  43.         return self::RESOURCE_NAME;
  44.     }
  45.     /**
  46.      * Return allowed attributes for current user
  47.      *
  48.      * @return array|string[]
  49.      */
  50.     function getResourceAttributes(): array
  51.     {
  52.         return [
  53.             self::VIEW,
  54.             self::ENABLE,
  55.             self::DISABLE,
  56.             self::DELETE,
  57.             self::DELETE_2FA,
  58.             self::LOGIN,
  59.         ];
  60.     }
  61.     /**
  62.      * Return allowed attributes for current user
  63.      *
  64.      * @param UserEntity $user
  65.      * @return array|string[]
  66.      */
  67.     function getAllowedAttributes(UserEntity $user): array
  68.     {
  69.         switch ($user->getRole()) {
  70.             case UserRole::ROLE_ADMIN:
  71.             case UserRole::ROLE_SYSTEM_USER:
  72.                 return $this->getResourceAttributes();
  73.             case UserRole::ROLE_SUPPORT:
  74.                 return [self::VIEWself::ENABLEself::DISABLEself::LOGIN];
  75.             default:
  76.                 return [self::VIEW];
  77.         }
  78.     }
  79.     /**
  80.      * Determines if the attribute and subject are supported by this voter.
  81.      *
  82.      * @param string $attribute An attribute
  83.      * @param mixed $subject The subject to secure, e.g. an object the user wants to access or any other PHP type
  84.      *
  85.      * @return bool True if the attribute and subject are supported, false otherwise
  86.      */
  87.     protected function supports($attribute$subject): bool
  88.     {
  89.         if ($subject !== null && !($subject instanceof UserInterface)) {
  90.             return false;
  91.         }
  92.         if (!in_array($attribute$this->getResourceAttributes())) {
  93.             return false;
  94.         }
  95.         if (!in_array($attribute, [self::VIEW]) && $subject === null) {
  96.             return false;
  97.         }
  98.         return true;
  99.     }
  100. }