/** * @internal */ public function setEditRights(User $user, TravelRequest $travelRequest, $isNewTravelRequest, $currentStatusId) { $isEditLocked = true; $isStatusLocked = false; $userId = $user->getId(); if (false === $isNewTravelRequest) { // the currently logged in user is always set as default $isStatusLocked = true; $isEditLocked = false; } else { if ($this->securityContext->isGranted('ROLE_ADMIN')) { $isEditLocked = false; $isStatusLocked = false; if (in_array($currentStatusId, array(Status::APPROVED, Status::REJECTED))) { $isEditLocked = true; $isStatusLocked = true; } elseif ($currentStatusId === Status::FOR_APPROVAL) { $isEditLocked = true; } } elseif ($userId === $travelRequest->getUser()->getId()) { if (Status::CREATED !== $currentStatusId && Status::REVISE !== $currentStatusId) { return false; } $isEditLocked = false; } elseif ($userId === $travelRequest->getGeneralManager()->getId()) { if (Status::FOR_APPROVAL !== $currentStatusId) { return false; } } } return array('isEditLocked' => $isEditLocked, 'isStatusLocked' => $isStatusLocked); }
/** * @internal */ public function setEditRights(TravelRequest $travelRequest, TravelRequestUserInterface $currentUser, $currentStatusId) { $isEditLocked = true; $isStatusLocked = true; if (!$this->securityContext->isGranted('ROLE_ADMIN')) { // If request was created by current user if ($travelRequest->getUser()->getId() === $currentUser->getId()) { if (in_array($currentStatusId, array(Status::CREATED, Status::REVISE))) { $isEditLocked = false; $isStatusLocked = false; } elseif ($travelRequest->getGeneralManager()->getId() === $travelRequest->getUser()->getId()) { $isStatusLocked = false; } } elseif ($travelRequest->getGeneralManager()->getId() === $currentUser->getId()) { if (!in_array($currentStatusId, array(Status::CREATED, Status::REVISE))) { $isStatusLocked = false; } } } else { $isEditLocked = false; $isStatusLocked = false; if (in_array($currentStatusId, array(Status::APPROVED, Status::REJECTED))) { $isEditLocked = true; $isStatusLocked = true; } elseif ($currentStatusId === Status::FOR_APPROVAL) { $isEditLocked = true; } } return array('isStatusLocked' => $isStatusLocked, 'isEditLocked' => $isEditLocked); }
/** * Method to check if a travel request can be viewed * * @param \Symfony\Component\Security\Core\User\UserInterface $user * @param \Opit\OpitHrm\TravelBundle\Entity\TravelRequest $travelRequest * @param type $isAdmin * @param type $isGeneralManager * @param type $travelRequestStatusId * @return type */ protected function isTRViewable(UserInterface $user, TravelRequest $travelRequest, $isAdmin, $isGeneralManager, $travelRequestStatusId) { // Check if tr has an id if (null === $travelRequest->getId()) { return VoterInterface::ACCESS_GRANTED; } $generalManagerId = $travelRequest->getGeneralManager()->getId(); // If user has admin role show tr if ($isAdmin) { return VoterInterface::ACCESS_GRANTED; } elseif ($isGeneralManager) { // If tr has not got the status created and gm is gm of it show tr if (Status::CREATED !== $travelRequestStatusId && $generalManagerId === $user->getId()) { return VoterInterface::ACCESS_GRANTED; } } if ($travelRequest->getUser() === $user) { return VoterInterface::ACCESS_GRANTED; } return VoterInterface::ACCESS_DENIED; }