json($this->canvas->teamPayload((int) $teamId, (bool) $request->attributes->get('can_read_sensitive', false), $this->canEdit($request, (int) $teamId))); } public function show(Request $request, string $uuid): JsonResponse { $teamId = getTeamIdFromToken(); if (is_null($teamId)) { return invalidTokenResponse(); } $project = Project::query()->whereTeamId($teamId)->whereUuid($uuid)->first(); if (! $project) { return response()->json(['message' => 'Project not found.'], 404); } $this->authorize('view', $project); return response()->json($this->canvas->payload($project, (bool) $request->attributes->get('can_read_sensitive', false), $this->canEdit($request, (int) $project->team_id))); } /** * Same rule as the environment canvas: team admins with a write token move cards and draw links. */ private function canEdit(Request $request, int $teamId): bool { $user = $request->user(); $token = $user->currentAccessToken(); return $user->isAdminOfTeam($teamId) && ($token->can('root') || $token->can('write')); } }