$this->assertAdministrativeAccess() || $this->assertTeamerAccess($disposition), static::DELETE => $this->assertAdminAccess(), static::FEEDBACK => $this->assertHouseManagerAccess($token, $disposition), default => false, }; } private function assertAdminAccess(): bool { return $this->security->isGranted('ROLE_ADMIN'); } private function assertAdministrativeAccess(): bool { return $this->security->isGranted('ROLE_ADMINISTRATIVE'); } private function assertHouseManagerAccess(TokenInterface $token, Disposition $disposition): bool { if (false === $this->security->isGranted('ROLE_HOUSE_MANAGER')) { return false; } $hotels = $this ->hotelDataProvider ->findByCode($token->getUser()->getHotelCode()) ; $hotelBusProIds = array_map(function (Hotel $hotel) { return $hotel->getBusProId(); }, $hotels); $destination = $disposition ->getAssignment() ->getDestination() ; return in_array($destination->getHotelBusProId(), $hotelBusProIds) && $destination->getDateTo() < new \DateTimeImmutable(); } private function assertTeamerAccess(Disposition $disposition): bool { if (false === $this->security->isGranted('ROLE_TEAMER')) { return false; } return $this->security->getUser()->getTeamer() === $disposition->getTeamer(); } }