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

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Service\SuperAdmin\Panel\AccessVoters;
  3. use Harmonizely\Entity\SuperAdmin\UserActionLogEntity;
  4. use Harmonizely\Types\SuperAdmin\UserRole;
  5. use Harmonizely\Entity\SuperAdmin\UserEntity;
  6. class UserActionLogVoter extends AbstractVoter
  7. {
  8.     /**
  9.      * Resource name
  10.      */
  11.     const RESOURCE_NAME 'user_action_log';
  12.     /**
  13.      * View user action log
  14.      */
  15.     const VIEW 'user_action_log_view';
  16.     /**
  17.      * Return resource name
  18.      *
  19.      * @return string
  20.      */
  21.     function getResourceName(): string
  22.     {
  23.         return self::RESOURCE_NAME;
  24.     }
  25.     /**
  26.      * Return allowed attributes for current user
  27.      *
  28.      * @return array|string[]
  29.      */
  30.     function getResourceAttributes(): array
  31.     {
  32.         return [self::VIEW];
  33.     }
  34.     /**
  35.      * Return allowed attributes for current user
  36.      *
  37.      * @param UserEntity $user
  38.      * @return array|string[]
  39.      */
  40.     function getAllowedAttributes(UserEntity $user): array
  41.     {
  42.         switch ($user->getRole()) {
  43.             case UserRole::ROLE_ADMIN:
  44.             case UserRole::ROLE_SYSTEM_USER:
  45.                 $allowedAttributes $this->getResourceAttributes();
  46.                 break;
  47.             default:
  48.                 $allowedAttributes = [];
  49.         }
  50.         return $allowedAttributes;
  51.     }
  52.     /**
  53.      * Determines if the attribute and subject are supported by this voter.
  54.      *
  55.      * @param string $attribute An attribute
  56.      * @param mixed $subject The subject to secure, e.g. an object the user wants to access or any other PHP type
  57.      *
  58.      * @return bool True if the attribute and subject are supported, false otherwise
  59.      */
  60.     protected function supports($attribute$subject): bool
  61.     {
  62.         if ($subject !== null && !($subject instanceof UserActionLogEntity)) {
  63.             return false;
  64.         }
  65.         if (!in_array($attribute$this->getResourceAttributes())) {
  66.             return false;
  67.         }
  68.         if (!in_array($attribute, [self::VIEW]) && $subject === null) {
  69.             return false;
  70.         }
  71.         return true;
  72.     }
  73. }