/** * * @param string $attribute * @param \Tracker\Entity\Issue $issue * @param \Tracker\Entity\User $user * @return boolean * @throws \LogicException */ protected function isGranted($attribute, $issue, $user = null) { // make sure there is a user object (i.e. that the user is logged in) if (!$user instanceof UserInterface) { return false; } // double-check that the User object is the expected entity. // It always will be, unless there is some misconfiguration of the // security system. if (!$user instanceof User) { throw new \LogicException('The user is somehow not our User class!'); } // If the current user have administrator rights, we should return true if ($user->getIsAdmin()) { return true; } $project = $issue->getProject(); switch ($attribute) { case self::VIEW: foreach ($project->getMembers() as $item) { if ($item->getMember()->getId() === $user->getId()) { return true; } } break; case self::EDIT: break; } return false; }
/** * Create issue * * @param Request $request * @param string $identifier */ public function createAction(Request $request, $identifier) { if (!($project = $this->getRepository('Project')->findOneByIdentifier($identifier))) { $this->application->abort(404, 'Project not found!'); } $this->denyAccessUnlessGranted('view', $project, 'You are not a member of this project!'); $this->get('breadcrumbs')->add('Home', 'homepage')->add('Projects', 'projects_list')->add($project->getTitle())->add('Issues')->add('Manage issue'); $entity = new Issue(); $entity->setCreatedBy($this->getUser()); $entity->setProject($project); $form = $this->get('form.factory')->create(new IssueType(), $entity); if ($form->handleRequest($request)->isValid()) { $entity = $form->getData(); $this->persistAndFlush($entity); $this->addFlash('success', 'Issue created successfuly!'); return $this->redirectToRoute('issues_list', array('identifier' => $project->getIdentifier())); } return $this->render('issues/create.twig', array('title' => $this->trans('title.page.issues.create'), 'form' => $form->createView())); }
/** * Create issues */ private function addIssues() { $createdBy = $this->entityManager->getReference('Tracker\\Entity\\User', 1); $project = $this->entityManager->getReference('Tracker\\Entity\\Project', 1); foreach (range(1, 3) as $number) { $priority = $this->entityManager->getReference('Tracker\\Entity\\Priority', $number); $status = $this->entityManager->getReference('Tracker\\Entity\\IssueStatus', $number); $tracker = $this->entityManager->getReference('Tracker\\Entity\\Tracker', $number); $entity = new Entity\Issue(); $entity->setCreatedBy($createdBy); $entity->setProject($project); $entity->setSubject(sprintf('Issue #%d', $number)); $entity->setDescription('Some description for this issue'); $entity->setPriority($priority); $entity->setStatus($status); $entity->setTracker($tracker); $this->entityManager->persist($entity); } }