resolve center in Report Controller

This commit is contained in:
Mathieu Jaumotte 2023-03-29 13:47:34 +02:00
parent 96ddc73e45
commit fcb057c55b
2 changed files with 21 additions and 12 deletions

View File

@ -11,12 +11,15 @@ declare(strict_types=1);
namespace Chill\ReportBundle\Controller; namespace Chill\ReportBundle\Controller;
use Chill\DocStoreBundle\Security\Authorization\PersonDocumentVoter;
use Chill\MainBundle\Pagination\PaginatorFactory; use Chill\MainBundle\Pagination\PaginatorFactory;
use Chill\MainBundle\Security\Authorization\AuthorizationHelper; use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
use Chill\MainBundle\Security\Resolver\CenterResolverManagerInterface;
use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Privacy\PrivacyEvent; use Chill\PersonBundle\Privacy\PrivacyEvent;
use Chill\ReportBundle\Entity\Report; use Chill\ReportBundle\Entity\Report;
use Chill\ReportBundle\Form\ReportType; use Chill\ReportBundle\Form\ReportType;
use Chill\ReportBundle\Security\Authorization\ReportVoter;
use DateTime; use DateTime;
use RuntimeException; use RuntimeException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
@ -25,7 +28,7 @@ use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Security\Core\Security;
use function count; use function count;
/** /**
@ -48,17 +51,25 @@ class ReportController extends AbstractController
*/ */
protected $paginator; protected $paginator;
private CenterResolverManagerInterface $centerResolverManager;
private Security $security;
/** /**
* ReportController constructor. * ReportController constructor.
*/ */
public function __construct( public function __construct(
EventDispatcherInterface $eventDispatcher, EventDispatcherInterface $eventDispatcher,
AuthorizationHelper $authorizationHelper, AuthorizationHelper $authorizationHelper,
PaginatorFactory $paginator PaginatorFactory $paginator,
CenterResolverManagerInterface $centerResolverManager,
Security $security
) { ) {
$this->eventDispatcher = $eventDispatcher; $this->eventDispatcher = $eventDispatcher;
$this->authorizationHelper = $authorizationHelper; $this->authorizationHelper = $authorizationHelper;
$this->paginator = $paginator; $this->paginator = $paginator;
$this->centerResolverManager = $centerResolverManager;
$this->security = $security;
} }
/** /**
@ -218,9 +229,9 @@ class ReportController extends AbstractController
$reachableScopes = $this->authorizationHelper $reachableScopes = $this->authorizationHelper
->getReachableScopes( ->getReachableScopes(
$this->getUser(), $this->security->getUser(),
new Role('CHILL_REPORT_SEE'), ReportVoter::SEE,
$person->getCenter() $this->centerResolverManager->resolveCenters($person)
); );
$total = $em $total = $em
@ -578,8 +589,8 @@ class ReportController extends AbstractController
), ),
'method' => 'PUT', 'method' => 'PUT',
'cFGroup' => $entity->getCFGroup(), 'cFGroup' => $entity->getCFGroup(),
'role' => new Role('CHILL_REPORT_UPDATE'), 'role' => ReportVoter::UPDATE,
'center' => $entity->getPerson()->getCenter(), 'center' => $this->centerResolverManager->resolveCenters($entity->getPerson()),
]); ]);
} }
} }

View File

@ -1,7 +1,5 @@
services: services:
Chill\ReportBundle\Controller\ReportController: Chill\ReportBundle\Controller\ReportController:
arguments: autowire: true
$eventDispatcher: '@Symfony\Component\EventDispatcher\EventDispatcherInterface' autoconfigure: true
$authorizationHelper: '@Chill\MainBundle\Security\Authorization\AuthorizationHelper'
$paginator: '@Chill\MainBundle\Pagination\PaginatorFactory'
tags: ['controller.service_arguments'] tags: ['controller.service_arguments']