src/Twig/SecurityExtension.php line 23

Open in your IDE?
  1. <?php
  2. /**
  3.  * @Author: Stephan<srandriamahenina@bocasay.com>
  4.  * @Date:   2017-10-11 10:56:38
  5.  * @Last Modified by:   stephan <m6ahenina@gmail.com>
  6.  * @Last Modified time: 2020-01-28 09:59:56
  7.  */
  8. namespace App\Twig;
  9. use App\Security\Authorization\GroupRoles;
  10. use App\Utils\Resolver;
  11. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  12. use Symfony\Component\Serializer\SerializerInterface;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. use Twig\Extension\AbstractExtension;
  15. use Twig\TwigFilter;
  16. use Twig\TwigFunction;
  17. class SecurityExtension extends AbstractExtension
  18. {
  19.     public function __construct(AuthorizationCheckerInterface $authorizationCheckerSerializerInterface $serializerTranslatorInterface $translator)
  20.     {
  21.         $this->authorizationChecker $authorizationChecker;
  22.         $this->serializer $serializer;
  23.         $this->translator $translator;
  24.     }
  25.     public function getFilters()
  26.     {
  27.         return [
  28.             new TwigFilter('roleAttr', [$this'roleAttr']),
  29.             new TwigFilter('roleObject', [$this'roleObject']),
  30.             new TwigFilter('serialize', [$this'serialize']),
  31.             new TwigFilter('normalize', [$this'normalize']),
  32.             new TwigFilter('group_role', [$this'groupRole'])
  33.         ];
  34.     }
  35.     public function getFunctions()
  36.     {
  37.         return [
  38.             new TwigFunction('roleAttr', [$this'roleAttr']),
  39.             new TwigFunction('roleObject', [$this'roleObject']),
  40.             new TwigFunction('is_allowed', [$this'isAllowed']),
  41.             new TwigFunction('serialize', [$this'serialize']),
  42.             new TwigFunction('normalize', [$this'normalize']),
  43.         ];
  44.     }
  45.     public function isAllowed($role null)
  46.     {
  47.         if (is_null($role)) {
  48.             return true;
  49.         }
  50.         return $this->authorizationChecker->isGranted($this->roleAttr($role), $this->roleObject($role));
  51.     }
  52.     public function roleAttr($role)
  53.     {
  54.         if (is_array($role)) {
  55.             return $role[0];
  56.         }
  57.         return $role;
  58.     }
  59.     public function roleObject($role)
  60.     {
  61.         if (is_array($role)) {
  62.             if (count($role) > 1) {
  63.                 return $role[1];
  64.             }
  65.         }
  66.         return null;
  67.     }
  68.     public function serialize($data$format 'json', array $context = [])
  69.     {
  70.         return $this->serializer->serialize($data$format$context);
  71.     }
  72.     public function normalize($object$format null, array $context = [])
  73.     {
  74.         return $this->serializer->normalize($object$format$context);
  75.     }
  76.     public function groupRole($role null): string
  77.     {
  78.         $choices array_flip(GroupRoles::ROLES);
  79.         return $this->translator->trans(Resolver::resolve([$choices$role], ''));
  80.     }
  81. }