src/App/Twig/Extension/SecurityExtension.php line 52

Open in your IDE?
  1. <?php
  2. namespace App\Twig\Extension;
  3. use App\Security\Core\Authorization\AuthorizationTester;
  4. use App\Util\Permissions;
  5. use Symfony\Component\ExpressionLanguage\Expression;
  6. use Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException;
  7. use Twig\Extension\AbstractExtension;
  8. use Twig\TwigFunction;
  9. /**
  10.  * Class ArraysExtension
  11.  * @package App\Twig\Extension
  12.  */
  13. final class SecurityExtension extends AbstractExtension
  14. {
  15.     /**
  16.      * @var AuthorizationTester|null
  17.      */
  18.     private ?AuthorizationTester $authorizationTester;
  19.     /**
  20.      * @param AuthorizationTester|null $authorizationTester
  21.      */
  22.     public function __construct(?AuthorizationTester $authorizationTester null)
  23.     {
  24.         $this->authorizationTester $authorizationTester;
  25.     }
  26.     /**
  27.      * {@inheritDoc}
  28.      */
  29.     public function getFunctions(): array
  30.     {
  31.         return [
  32.             new TwigFunction(
  33.                 'maybe_granted',
  34.                 [$this'maybeGranted'],
  35.             ),
  36.             new TwigFunction(
  37.                 'attributes_expression',
  38.                 [$this'attributesExpression'],
  39.             ),
  40.         ];
  41.     }
  42.     /**
  43.      * @param string|array<string> $role
  44.      * @return bool
  45.      */
  46.     public function maybeGranted($role): bool
  47.     {
  48.         if (null === $this->authorizationTester) {
  49.             return false;
  50.         }
  51.         try {
  52.             return $this->authorizationTester->maybeGranted($role);
  53.         } catch (AuthenticationCredentialsNotFoundException $e) {
  54.             return false;
  55.         }
  56.     }
  57.     /**
  58.      * @param array|string[]|string $attributes
  59.      * @return string|Expression
  60.      */
  61.     public function attributesExpression(string|array $attributes): string|Expression
  62.     {
  63.         return Permissions::attributesExpression($attributes);
  64.     }
  65. }