From 0ffd6a857c0ca91d8c72fbe88e2b931045fcedb9 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Thu, 17 Feb 2022 16:11:46 +0100 Subject: [PATCH] Rights added to all menu entries --- .../Menu/PersonMenuBuilder.php | 12 +-- .../src/Menu/UserMenuBuilder.php | 22 +--- .../Menu/AccompanyingCourseMenuBuilder.php | 23 ++-- .../Menu/UserMenuBuilder.php | 12 +-- .../MenuBuilder/LocationMenuBuilder.php | 13 +++ .../MenuBuilder/PermissionMenuBuilder.php | 12 +++ .../MenuBuilder/SectionMenuBuilder.php | 47 ++++---- .../Routing/MenuBuilder/UserMenuBuilder.php | 11 +- .../Menu/AccompanyingCourseMenuBuilder.php | 52 ++++----- .../Menu/HouseholdMenuBuilder.php | 74 +++++++------ .../Menu/PersonMenuBuilder.php | 101 +++++++++--------- .../Menu/SectionMenuBuilder.php | 17 +-- .../ChillTaskBundle/Menu/MenuBuilder.php | 44 ++++---- .../Menu/SectionMenuBuilder.php | 12 +-- .../ChillTaskBundle/Menu/UserMenuBuilder.php | 23 ++-- .../Menu/MenuBuilder.php | 12 +-- 16 files changed, 247 insertions(+), 240 deletions(-) diff --git a/src/Bundle/ChillActivityBundle/Menu/PersonMenuBuilder.php b/src/Bundle/ChillActivityBundle/Menu/PersonMenuBuilder.php index 34b18f078..ef6b56e2e 100644 --- a/src/Bundle/ChillActivityBundle/Menu/PersonMenuBuilder.php +++ b/src/Bundle/ChillActivityBundle/Menu/PersonMenuBuilder.php @@ -15,19 +15,13 @@ use Chill\ActivityBundle\Security\Authorization\ActivityVoter; use Chill\MainBundle\Routing\LocalMenuBuilderInterface; use Knp\Menu\MenuItem; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class PersonMenuBuilder implements LocalMenuBuilderInterface { - /** - * @var AuthorizationCheckerInterface - */ - protected $authorizationChecker; + protected AuthorizationCheckerInterface $authorizationChecker; - /** - * @var TranslatorInterface - */ - protected $translator; + protected TranslatorInterface $translator; public function __construct( AuthorizationCheckerInterface $authorizationChecker, diff --git a/src/Bundle/ChillAsideActivityBundle/src/Menu/UserMenuBuilder.php b/src/Bundle/ChillAsideActivityBundle/src/Menu/UserMenuBuilder.php index 943aeed4c..5d428f9a6 100644 --- a/src/Bundle/ChillAsideActivityBundle/src/Menu/UserMenuBuilder.php +++ b/src/Bundle/ChillAsideActivityBundle/src/Menu/UserMenuBuilder.php @@ -16,29 +16,17 @@ use Chill\TaskBundle\Templating\UI\CountNotificationTask; use Knp\Menu\MenuItem; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class UserMenuBuilder implements LocalMenuBuilderInterface { - /** - * @var AuthorizationCheckerInterface - */ - public $authorizationChecker; + public AuthorizationCheckerInterface $authorizationChecker; - /** - * @var CountNotificationTask - */ - public $counter; + public CountNotificationTask $counter; - /** - * @var TokenStorageInterface - */ - public $tokenStorage; + public TokenStorageInterface $tokenStorage; - /** - * @var TranslatorInterface - */ - public $translator; + public TranslatorInterface $translator; public function __construct( CountNotificationTask $counter, diff --git a/src/Bundle/ChillCalendarBundle/Menu/AccompanyingCourseMenuBuilder.php b/src/Bundle/ChillCalendarBundle/Menu/AccompanyingCourseMenuBuilder.php index eca770fe0..05f47ded4 100644 --- a/src/Bundle/ChillCalendarBundle/Menu/AccompanyingCourseMenuBuilder.php +++ b/src/Bundle/ChillCalendarBundle/Menu/AccompanyingCourseMenuBuilder.php @@ -14,8 +14,10 @@ namespace Chill\CalendarBundle\Menu; use Chill\MainBundle\Routing\LocalMenuBuilderInterface; use Chill\MainBundle\Security\Authorization\AuthorizationHelper; use Chill\PersonBundle\Entity\AccompanyingPeriod; +use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; use Knp\Menu\MenuItem; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; +use Symfony\Component\Security\Core\Security; use Symfony\Contracts\Translation\TranslatorInterface; class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface @@ -26,14 +28,18 @@ class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface protected TranslatorInterface $translator; + protected Security $security; + public function __construct( TokenStorageInterface $tokenStorage, AuthorizationHelper $authorizationHelper, - TranslatorInterface $translator + TranslatorInterface $translator, + Security $security ) { $this->translator = $translator; $this->authorizationHelper = $authorizationHelper; $this->tokenStorage = $tokenStorage; + $this->security = $security; } public function buildMenu($menuId, MenuItem $menu, array $parameters) @@ -41,12 +47,15 @@ class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface $period = $parameters['accompanyingCourse']; if (AccompanyingPeriod::STEP_DRAFT !== $period->getStep()) { - $menu->addChild($this->translator->trans('Calendar'), [ - 'route' => 'chill_calendar_calendar_list', - 'routeParameters' => [ - 'accompanying_period_id' => $period->getId(), - ], ]) - ->setExtras(['order' => 35]); + + if ($this->security->isGranted(AccompanyingPeriodVoter::SEE, $period)) { + $menu->addChild($this->translator->trans('Calendar'), [ + 'route' => 'chill_calendar_calendar_list', + 'routeParameters' => [ + 'accompanying_period_id' => $period->getId(), + ], ]) + ->setExtras(['order' => 35]); + } } } diff --git a/src/Bundle/ChillFamilyMembersBundle/Menu/UserMenuBuilder.php b/src/Bundle/ChillFamilyMembersBundle/Menu/UserMenuBuilder.php index 17976b6ef..49f4d3786 100644 --- a/src/Bundle/ChillFamilyMembersBundle/Menu/UserMenuBuilder.php +++ b/src/Bundle/ChillFamilyMembersBundle/Menu/UserMenuBuilder.php @@ -15,19 +15,13 @@ use Chill\AMLI\FamilyMembersBundle\Security\Voter\FamilyMemberVoter; use Chill\MainBundle\Routing\LocalMenuBuilderInterface; use Knp\Menu\MenuItem; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class UserMenuBuilder implements LocalMenuBuilderInterface { - /** - * @var AuthorizationCheckerInterface - */ - protected $authorizationChecker; + protected AuthorizationCheckerInterface $authorizationChecker; - /** - * @var TranslatorInterface - */ - protected $translator; + protected TranslatorInterface $translator; public function __construct( AuthorizationCheckerInterface $authorizationChecker, diff --git a/src/Bundle/ChillMainBundle/Routing/MenuBuilder/LocationMenuBuilder.php b/src/Bundle/ChillMainBundle/Routing/MenuBuilder/LocationMenuBuilder.php index da1ce479b..b0c83a7a4 100644 --- a/src/Bundle/ChillMainBundle/Routing/MenuBuilder/LocationMenuBuilder.php +++ b/src/Bundle/ChillMainBundle/Routing/MenuBuilder/LocationMenuBuilder.php @@ -12,11 +12,24 @@ declare(strict_types=1); namespace Chill\MainBundle\Routing\MenuBuilder; use Knp\Menu\MenuItem; +use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; class LocationMenuBuilder implements \Chill\MainBundle\Routing\LocalMenuBuilderInterface { + private AuthorizationCheckerInterface $authorizationChecker; + + public function __construct(AuthorizationCheckerInterface $authorizationChecker) + { + $this->authorizationChecker = $authorizationChecker; + } + public function buildMenu($menuId, MenuItem $menu, array $parameters) { + + if (!$this->authorizationChecker->isGranted('ROLE_ADMIN')) { + return; + } + $menu->addChild('Location type list', [ 'route' => 'chill_crud_main_location_type_index', ])->setExtras(['order' => 205]); diff --git a/src/Bundle/ChillMainBundle/Routing/MenuBuilder/PermissionMenuBuilder.php b/src/Bundle/ChillMainBundle/Routing/MenuBuilder/PermissionMenuBuilder.php index 6fab6b635..6c228cc90 100644 --- a/src/Bundle/ChillMainBundle/Routing/MenuBuilder/PermissionMenuBuilder.php +++ b/src/Bundle/ChillMainBundle/Routing/MenuBuilder/PermissionMenuBuilder.php @@ -12,11 +12,23 @@ declare(strict_types=1); namespace Chill\MainBundle\Routing\MenuBuilder; use Knp\Menu\MenuItem; +use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; class PermissionMenuBuilder implements \Chill\MainBundle\Routing\LocalMenuBuilderInterface { + private AuthorizationCheckerInterface $authorizationChecker; + + public function __construct(AuthorizationCheckerInterface $authorizationChecker) + { + $this->authorizationChecker = $authorizationChecker; + } + public function buildMenu($menuId, MenuItem $menu, array $parameters) { + if (!$this->authorizationChecker->isGranted('ROLE_ADMIN')) { + return; + } + $menu->addChild('Permissions group list', [ 'route' => 'admin_permissionsgroup', ])->setExtras([ diff --git a/src/Bundle/ChillMainBundle/Routing/MenuBuilder/SectionMenuBuilder.php b/src/Bundle/ChillMainBundle/Routing/MenuBuilder/SectionMenuBuilder.php index 9aae86e48..aac21241d 100644 --- a/src/Bundle/ChillMainBundle/Routing/MenuBuilder/SectionMenuBuilder.php +++ b/src/Bundle/ChillMainBundle/Routing/MenuBuilder/SectionMenuBuilder.php @@ -15,22 +15,17 @@ use Chill\MainBundle\Routing\LocalMenuBuilderInterface; use Chill\MainBundle\Security\Authorization\ChillExportVoter; use Knp\Menu\MenuItem; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; /** * Class SectionMenuBuilder. */ class SectionMenuBuilder implements LocalMenuBuilderInterface { - /** - * @var AuthorizationCheckerInterface - */ - protected $authorizationChecker; - /** - * @var TranslatorInterface - */ - protected $translator; + protected AuthorizationCheckerInterface $authorizationChecker; + + protected TranslatorInterface $translator; /** * SectionMenuBuilder constructor. @@ -46,22 +41,26 @@ class SectionMenuBuilder implements LocalMenuBuilderInterface */ public function buildMenu($menuId, MenuItem $menu, array $parameters) { - $menu->addChild($this->translator->trans('Homepage'), [ - 'route' => 'chill_main_homepage', - ]) - ->setExtras([ - 'icons' => ['home'], - 'order' => 0, - ]); + if (!$this->authorizationChecker->isGranted('ROLE_USER')) { + + $menu->addChild($this->translator->trans('Homepage'), [ + 'route' => 'chill_main_homepage', + ]) + ->setExtras([ + 'icons' => ['home'], + 'order' => 0, + ]); + + $menu->addChild($this->translator->trans('Global timeline'), [ + 'route' => 'chill_center_timeline', + ]) + ->setExtras( + [ + 'order' => 10, + ] + ); + } - $menu->addChild($this->translator->trans('Global timeline'), [ - 'route' => 'chill_center_timeline', - ]) - ->setExtras( - [ - 'order' => 10, - ] - ); if ($this->authorizationChecker->isGranted(ChillExportVoter::EXPORT)) { $menu->addChild($this->translator->trans('Export Menu'), [ diff --git a/src/Bundle/ChillMainBundle/Routing/MenuBuilder/UserMenuBuilder.php b/src/Bundle/ChillMainBundle/Routing/MenuBuilder/UserMenuBuilder.php index b2fd5180e..9f1e538c1 100644 --- a/src/Bundle/ChillMainBundle/Routing/MenuBuilder/UserMenuBuilder.php +++ b/src/Bundle/ChillMainBundle/Routing/MenuBuilder/UserMenuBuilder.php @@ -15,6 +15,7 @@ use Chill\MainBundle\Entity\User; use Chill\MainBundle\Notification\Counter\NotificationByUserCounter; use Chill\MainBundle\Routing\LocalMenuBuilderInterface; use Chill\MainBundle\Workflow\Counter\WorkflowByUserCounter; +use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Component\Security\Core\Security; use Symfony\Contracts\Translation\TranslatorInterface; @@ -28,20 +29,28 @@ class UserMenuBuilder implements LocalMenuBuilderInterface private WorkflowByUserCounter $workflowByUserCounter; + private AuthorizationCheckerInterface $authorizationChecker; + public function __construct( NotificationByUserCounter $notificationByUserCounter, WorkflowByUserCounter $workflowByUserCounter, Security $security, - TranslatorInterface $translator + TranslatorInterface $translator, + AuthorizationCheckerInterface $authorizationChecker ) { $this->notificationByUserCounter = $notificationByUserCounter; $this->workflowByUserCounter = $workflowByUserCounter; $this->security = $security; $this->translator = $translator; + $this->authorizationChecker = $authorizationChecker; } public function buildMenu($menuId, \Knp\Menu\MenuItem $menu, array $parameters) { + if (!$this->authorizationChecker->isGranted('ROLE_USER')) { + return; + } + $user = $this->security->getUser(); if ($user instanceof User) { diff --git a/src/Bundle/ChillPersonBundle/Menu/AccompanyingCourseMenuBuilder.php b/src/Bundle/ChillPersonBundle/Menu/AccompanyingCourseMenuBuilder.php index 827dfb0a6..7d760db55 100644 --- a/src/Bundle/ChillPersonBundle/Menu/AccompanyingCourseMenuBuilder.php +++ b/src/Bundle/ChillPersonBundle/Menu/AccompanyingCourseMenuBuilder.php @@ -29,10 +29,7 @@ class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface protected Security $security; - /** - * @var TranslatorInterface - */ - protected $translator; + protected TranslatorInterface $translator; public function __construct(TranslatorInterface $translator, Registry $registry, Security $security) { @@ -46,12 +43,14 @@ class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface /** @var AccompanyingPeriod $period */ $period = $parameters['accompanyingCourse']; - $menu->addChild($this->translator->trans('Resume Accompanying Course'), [ - 'route' => 'chill_person_accompanying_course_index', - 'routeParameters' => [ - 'accompanying_period_id' => $period->getId(), - ], ]) - ->setExtras(['order' => 10]); + if ($this->security->isGranted(AccompanyingPeriodVoter::SEE, $period)) { + $menu->addChild($this->translator->trans('Resume Accompanying Course'), [ + 'route' => 'chill_person_accompanying_course_index', + 'routeParameters' => [ + 'accompanying_period_id' => $period->getId(), + ], ]) + ->setExtras(['order' => 10]); + } if ($this->security->isGranted(AccompanyingPeriodVoter::EDIT, $period)) { $menu->addChild($this->translator->trans('Edit Accompanying Course'), [ @@ -94,22 +93,25 @@ class AccompanyingCourseMenuBuilder implements LocalMenuBuilderInterface $workflow = $this->registry->get($period, 'accompanying_period_lifecycle'); - if (null !== $period->getClosingDate()) { - $menu->addChild($this->translator->trans('Re-open accompanying course'), [ - 'route' => 'chill_person_accompanying_course_reopen', - 'routeParameters' => [ - 'accompanying_period_id' => $period->getId(), - ], ]) - ->setExtras(['order' => 99998]); - } + if ($this->security->isGranted(AccompanyingPeriodVoter::EDIT, $period)) { - if ($workflow->can($period, 'close')) { - $menu->addChild($this->translator->trans('Close Accompanying Course'), [ - 'route' => 'chill_person_accompanying_course_close', - 'routeParameters' => [ - 'accompanying_period_id' => $period->getId(), - ], ]) - ->setExtras(['order' => 99999]); + if (null !== $period->getClosingDate()) { + $menu->addChild($this->translator->trans('Re-open accompanying course'), [ + 'route' => 'chill_person_accompanying_course_reopen', + 'routeParameters' => [ + 'accompanying_period_id' => $period->getId(), + ], ]) + ->setExtras(['order' => 99998]); + } + + if ($workflow->can($period, 'close')) { + $menu->addChild($this->translator->trans('Close Accompanying Course'), [ + 'route' => 'chill_person_accompanying_course_close', + 'routeParameters' => [ + 'accompanying_period_id' => $period->getId(), + ], ]) + ->setExtras(['order' => 99999]); + } } } diff --git a/src/Bundle/ChillPersonBundle/Menu/HouseholdMenuBuilder.php b/src/Bundle/ChillPersonBundle/Menu/HouseholdMenuBuilder.php index a4d3f8d03..adf9f5722 100644 --- a/src/Bundle/ChillPersonBundle/Menu/HouseholdMenuBuilder.php +++ b/src/Bundle/ChillPersonBundle/Menu/HouseholdMenuBuilder.php @@ -12,7 +12,9 @@ declare(strict_types=1); namespace Chill\PersonBundle\Menu; use Chill\MainBundle\Routing\LocalMenuBuilderInterface; +use Chill\PersonBundle\Security\Authorization\HouseholdVoter; use Knp\Menu\MenuItem; +use Symfony\Component\Security\Core\Security; use Symfony\Contracts\Translation\TranslatorInterface; class HouseholdMenuBuilder implements LocalMenuBuilderInterface @@ -22,9 +24,12 @@ class HouseholdMenuBuilder implements LocalMenuBuilderInterface */ protected $translator; - public function __construct(TranslatorInterface $translator) + private $security; + + public function __construct(TranslatorInterface $translator, Security $security) { $this->translator = $translator; + $this->security = $security; } public function buildMenu($menuId, MenuItem $menu, array $parameters): void @@ -32,40 +37,47 @@ class HouseholdMenuBuilder implements LocalMenuBuilderInterface /** @var \Chill\PersonBundle\Entity\Household\Household $household */ $household = $parameters['household']; - $menu->addChild($this->translator->trans('household.Household summary'), [ - 'route' => 'chill_person_household_summary', - 'routeParameters' => [ - 'household_id' => $household->getId(), - ], ]) - ->setExtras(['order' => 10]); + if ($this->security->isGranted(HouseholdVoter::SEE, $household)) { + $menu->addChild($this->translator->trans('household.Household summary'), [ + 'route' => 'chill_person_household_summary', + 'routeParameters' => [ + 'household_id' => $household->getId(), + ], ]) + ->setExtras(['order' => 10]); - $menu->addChild($this->translator->trans('household.Relationship'), [ - 'route' => 'chill_person_household_relationship', - 'routeParameters' => [ - 'household_id' => $household->getId(), - ], ]) - ->setExtras(['order' => 15]); + $menu->addChild($this->translator->trans('household.Relationship'), [ + 'route' => 'chill_person_household_relationship', + 'routeParameters' => [ + 'household_id' => $household->getId(), + ], ]) + ->setExtras(['order' => 15]); + } - $menu->addChild($this->translator->trans('household_composition.Compositions'), [ - 'route' => 'chill_person_household_composition_index', - 'routeParameters' => [ - 'id' => $household->getId(), - ], ]) - ->setExtras(['order' => 17]); + if ($this->security->isGranted(HouseholdVoter::EDIT, $household)) { + $menu->addChild($this->translator->trans('household_composition.Compositions'), [ + 'route' => 'chill_person_household_composition_index', + 'routeParameters' => [ + 'id' => $household->getId(), + ], ]) + ->setExtras(['order' => 17]); + } - $menu->addChild($this->translator->trans('household.Accompanying period'), [ - 'route' => 'chill_person_household_accompanying_period', - 'routeParameters' => [ - 'household_id' => $household->getId(), - ], ]) - ->setExtras(['order' => 20]); + if ($this->security->isGranted(HouseholdVoter::SEE, $household)) { + $menu->addChild($this->translator->trans('household.Accompanying period'), [ + 'route' => 'chill_person_household_accompanying_period', + 'routeParameters' => [ + 'household_id' => $household->getId(), + ], ]) + ->setExtras(['order' => 20]); + + $menu->addChild($this->translator->trans('household.Addresses'), [ + 'route' => 'chill_person_household_addresses', + 'routeParameters' => [ + 'household_id' => $household->getId(), + ], ]) + ->setExtras(['order' => 30]); + } - $menu->addChild($this->translator->trans('household.Addresses'), [ - 'route' => 'chill_person_household_addresses', - 'routeParameters' => [ - 'household_id' => $household->getId(), - ], ]) - ->setExtras(['order' => 30]); } public static function getMenuIds(): array diff --git a/src/Bundle/ChillPersonBundle/Menu/PersonMenuBuilder.php b/src/Bundle/ChillPersonBundle/Menu/PersonMenuBuilder.php index 16422f47c..4f950e83b 100644 --- a/src/Bundle/ChillPersonBundle/Menu/PersonMenuBuilder.php +++ b/src/Bundle/ChillPersonBundle/Menu/PersonMenuBuilder.php @@ -13,6 +13,7 @@ namespace Chill\PersonBundle\Menu; use Chill\MainBundle\Routing\LocalMenuBuilderInterface; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; +use Chill\PersonBundle\Security\Authorization\PersonVoter; use Knp\Menu\MenuItem; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\Security\Core\Security; @@ -33,10 +34,7 @@ class PersonMenuBuilder implements LocalMenuBuilderInterface */ protected $showAccompanyingPeriod; - /** - * @var TranslatorInterface - */ - protected $translator; + protected TranslatorInterface $translator; private Security $security; @@ -52,45 +50,47 @@ class PersonMenuBuilder implements LocalMenuBuilderInterface public function buildMenu($menuId, MenuItem $menu, array $parameters) { - $menu->addChild($this->translator->trans('Person details'), [ - 'route' => 'chill_person_view', - 'routeParameters' => [ - 'person_id' => $parameters['person']->getId(), - ], - ]) - ->setExtras([ - 'order' => 50, - ]); + if ($this->security->isGranted(PersonVoter::SEE, $parameters['person'])) { - $menu->addChild($this->translator->trans('Residential addresses'), [ - 'route' => 'chill_person_residential_address_list', - 'routeParameters' => [ - 'id' => $parameters['person']->getId(), - ], - ]) - ->setExtras([ - 'order' => 60, - ]); + $menu->addChild($this->translator->trans('Person details'), [ + 'route' => 'chill_person_view', + 'routeParameters' => [ + 'person_id' => $parameters['person']->getId(), + ], + ]) + ->setExtras([ + 'order' => 50, + ]); + $menu->addChild($this->translator->trans('Residential addresses'), [ + 'route' => 'chill_person_residential_address_list', + 'routeParameters' => [ + 'id' => $parameters['person']->getId(), + ], + ]) + ->setExtras([ + 'order' => 60, + ]); - $menu->addChild($this->translator->trans('household.person history'), [ - 'route' => 'chill_person_household_person_history', - 'routeParameters' => [ - 'person_id' => $parameters['person']->getId(), - ], - ]) - ->setExtras([ - 'order' => 99999, - ]); + $menu->addChild($this->translator->trans('household.person history'), [ + 'route' => 'chill_person_household_person_history', + 'routeParameters' => [ + 'person_id' => $parameters['person']->getId(), + ], + ]) + ->setExtras([ + 'order' => 99999, + ]); - $menu->addChild($this->translator->trans('Person duplicate'), [ - 'route' => 'chill_person_duplicate_view', - 'routeParameters' => [ - 'person_id' => $parameters['person']->getId(), - ], - ]) - ->setExtras([ - 'order' => 99999, - ]); + $menu->addChild($this->translator->trans('Person duplicate'), [ + 'route' => 'chill_person_duplicate_view', + 'routeParameters' => [ + 'person_id' => $parameters['person']->getId(), + ], + ]) + ->setExtras([ + 'order' => 99999, + ]); + } if ( 'visible' === $this->showAccompanyingPeriod @@ -106,16 +106,17 @@ class PersonMenuBuilder implements LocalMenuBuilderInterface 'order' => 100, ]); } - - $menu->addChild($this->translator->trans('person_resources_menu'), [ - 'route' => 'chill_person_resource_list', - 'routeParameters' => [ - 'person_id' => $parameters['person']->getId(), - ], - ]) - ->setExtras([ - 'order' => 99999, - ]); + if ($this->security->isGranted(PersonVoter::SEE, $parameters['person'])) { + $menu->addChild($this->translator->trans('person_resources_menu'), [ + 'route' => 'chill_person_resource_list', + 'routeParameters' => [ + 'person_id' => $parameters['person']->getId(), + ], + ]) + ->setExtras([ + 'order' => 99999, + ]); + } } public static function getMenuIds(): array diff --git a/src/Bundle/ChillPersonBundle/Menu/SectionMenuBuilder.php b/src/Bundle/ChillPersonBundle/Menu/SectionMenuBuilder.php index eff2e7a3a..77b73685f 100644 --- a/src/Bundle/ChillPersonBundle/Menu/SectionMenuBuilder.php +++ b/src/Bundle/ChillPersonBundle/Menu/SectionMenuBuilder.php @@ -12,6 +12,7 @@ declare(strict_types=1); namespace Chill\PersonBundle\Menu; use Chill\MainBundle\Routing\LocalMenuBuilderInterface; +use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; use Chill\PersonBundle\Security\Authorization\PersonVoter; use Knp\Menu\MenuItem; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; @@ -56,13 +57,15 @@ class SectionMenuBuilder implements LocalMenuBuilderInterface ]); } - $menu->addChild($this->translator->trans('Create an accompanying course'), [ - 'route' => 'chill_person_accompanying_course_new', - ]) - ->setExtras([ - 'order' => 11, - 'icons' => ['plus'], - ]); + if ($this->authorizationChecker->isGranted(AccompanyingPeriodVoter::CREATE)) { + $menu->addChild($this->translator->trans('Create an accompanying course'), [ + 'route' => 'chill_person_accompanying_course_new', + ]) + ->setExtras([ + 'order' => 11, + 'icons' => ['plus'], + ]); + } } public static function getMenuIds(): array diff --git a/src/Bundle/ChillTaskBundle/Menu/MenuBuilder.php b/src/Bundle/ChillTaskBundle/Menu/MenuBuilder.php index 0ed5125a5..1af439b0d 100644 --- a/src/Bundle/ChillTaskBundle/Menu/MenuBuilder.php +++ b/src/Bundle/ChillTaskBundle/Menu/MenuBuilder.php @@ -16,19 +16,13 @@ use Chill\TaskBundle\Security\Authorization\TaskVoter; use Knp\Menu\MenuItem; use LogicException; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class MenuBuilder implements LocalMenuBuilderInterface { - /** - * @var AuthorizationCheckerInterface - */ - protected $authorizationChecker; + protected AuthorizationCheckerInterface $authorizationChecker; - /** - * @var TranslatorInterface - */ - protected $translator; + protected TranslatorInterface $translator; public function __construct( AuthorizationCheckerInterface $authorizationChecker, @@ -38,22 +32,6 @@ class MenuBuilder implements LocalMenuBuilderInterface $this->authorizationChecker = $authorizationChecker; } - public function buildAccompanyingCourseMenu($menu, $parameters) - { - $course = $parameters['accompanyingCourse']; - - if ($this->authorizationChecker->isGranted(TaskVoter::SHOW, $course)) { - $menu->addChild( - $this->translator->trans('Tasks'), - [ - 'route' => 'chill_task_singletask_by-course_list', - 'routeParameters' => ['id' => $course->getId()], - ] - ) - ->setExtra('order', 400); - } - } - public function buildMenu($menuId, MenuItem $menu, array $parameters) { switch ($menuId) { @@ -77,6 +55,22 @@ class MenuBuilder implements LocalMenuBuilderInterface } } + public function buildAccompanyingCourseMenu($menu, $parameters) + { + $course = $parameters['accompanyingCourse']; + + if ($this->authorizationChecker->isGranted(TaskVoter::SHOW, $course)) { + $menu->addChild( + $this->translator->trans('Tasks'), + [ + 'route' => 'chill_task_singletask_by-course_list', + 'routeParameters' => ['id' => $course->getId()], + ] + ) + ->setExtra('order', 400); + } + } + public function buildPersonMenu($menu, $parameters) { //var $person \Chill\PersonBundle\Entity\Person */ diff --git a/src/Bundle/ChillTaskBundle/Menu/SectionMenuBuilder.php b/src/Bundle/ChillTaskBundle/Menu/SectionMenuBuilder.php index 98d90f75a..7968ba4f2 100644 --- a/src/Bundle/ChillTaskBundle/Menu/SectionMenuBuilder.php +++ b/src/Bundle/ChillTaskBundle/Menu/SectionMenuBuilder.php @@ -15,19 +15,13 @@ use Chill\MainBundle\Routing\LocalMenuBuilderInterface; use Chill\TaskBundle\Security\Authorization\TaskVoter; use Knp\Menu\MenuItem; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class SectionMenuBuilder implements LocalMenuBuilderInterface { - /** - * @var AuthorizationCheckerInterface - */ - public $authorizationChecker; + public AuthorizationCheckerInterface $authorizationChecker; - /** - * @var TranslatorInterface - */ - public $translator; + public TranslatorInterface $translator; public function __construct( AuthorizationCheckerInterface $authorizationChecker, diff --git a/src/Bundle/ChillTaskBundle/Menu/UserMenuBuilder.php b/src/Bundle/ChillTaskBundle/Menu/UserMenuBuilder.php index 4296301c9..ef329979e 100644 --- a/src/Bundle/ChillTaskBundle/Menu/UserMenuBuilder.php +++ b/src/Bundle/ChillTaskBundle/Menu/UserMenuBuilder.php @@ -17,29 +17,18 @@ use Chill\TaskBundle\Templating\UI\CountNotificationTask; use Knp\Menu\MenuItem; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class UserMenuBuilder implements LocalMenuBuilderInterface { - /** - * @var AuthorizationCheckerInterface - */ - public $authorizationChecker; - /** - * @var CountNotificationTask - */ - public $counter; + public AuthorizationCheckerInterface $authorizationChecker; - /** - * @var TokenStorageInterface - */ - public $tokenStorage; + public CountNotificationTask $counter; - /** - * @var TranslatorInterface - */ - public $translator; + public TokenStorageInterface $tokenStorage; + + public TranslatorInterface $translator; public function __construct( CountNotificationTask $counter, diff --git a/src/Bundle/ChillThirdPartyBundle/Menu/MenuBuilder.php b/src/Bundle/ChillThirdPartyBundle/Menu/MenuBuilder.php index aec5ffb3f..ee1f97f15 100644 --- a/src/Bundle/ChillThirdPartyBundle/Menu/MenuBuilder.php +++ b/src/Bundle/ChillThirdPartyBundle/Menu/MenuBuilder.php @@ -15,22 +15,16 @@ use Chill\MainBundle\Routing\LocalMenuBuilderInterface; use Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter; use Knp\Menu\MenuItem; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; /** * Add an entry in section to go to third party index page. */ class MenuBuilder implements LocalMenuBuilderInterface { - /** - * @var AuthorizationCheckerInterface - */ - protected $authorizationChecker; + protected AuthorizationCheckerInterface $authorizationChecker; - /** - * @var TranslatorInterface - */ - protected $translator; + protected TranslatorInterface $translator; public function __construct( AuthorizationCheckerInterface $authorizationChecker,