/**
  * Handle an incoming request.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \Closure  $next
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     $userId = \Authorizer::getResourceOwnerId();
     $projectId = $request->project;
     if ($this->repository->isOwner($projectId, $userId) == false) {
         return ['error' => 'Access Forbidden'];
     }
     return $next($request);
 }
 public function createFile($data)
 {
     try {
         $this->validator->with($data)->passesOrFail();
         $project = $this->projectRepository->skipPresenter()->find($data['project_id']);
         $projectFile = $project->files()->create($data);
         $this->storage->put($projectFile->getFileName(), $this->filesystem->get($data['file']));
         return $projectFile;
     } catch (ValidatorException $e) {
         return ["sucess" => false, "message" => $e->getMessageBag()];
     }
 }
 public function destroy($id)
 {
     try {
         $this->repository->delete($id);
         return ['success' => true, 'message' => 'Projeto deletado com sucesso!'];
     } catch (QueryException $e) {
         return ['error' => true, 'message' => 'Projeto não pode ser apagado pois existe um ou mais clientes vinculados a ele.'];
     } catch (ModelNotFoundException $e) {
         return ['error' => true, 'message' => 'Projeto não encontrado.'];
     } catch (\Exception $e) {
         return ['error' => true, 'message' => 'Ocorreu algum erro ao excluir o projeto.'];
     }
 }
 private function checkProjectMember($projectId)
 {
     $userId = Authorizer::getResourceOwnerId();
     return $this->repository->hasMember($projectId, $userId);
 }