|
1 | 1 | import { type Context as OtelContext, context as otelContextApi } from '@opentelemetry/api' |
2 | 2 | import { db } from '@sim/db' |
3 | | -import { copilotChats } from '@sim/db/schema' |
| 3 | +import { copilotChats, permissions } from '@sim/db/schema' |
4 | 4 | import { createLogger } from '@sim/logger' |
5 | 5 | import { generateId } from '@sim/utils/id' |
6 | | -import { eq, sql } from 'drizzle-orm' |
| 6 | +import { and, eq, sql } from 'drizzle-orm' |
7 | 7 | import { type NextRequest, NextResponse } from 'next/server' |
8 | 8 | import { z } from 'zod' |
9 | 9 | import { isZodError, validationErrorResponse } from '@/lib/api/server' |
@@ -569,6 +569,22 @@ async function resolveBranch(params: { |
569 | 569 | return createBadRequestResponse('workspaceId is required when workflowId is not provided') |
570 | 570 | } |
571 | 571 |
|
| 572 | + const [permissionRow] = await db |
| 573 | + .select({ permissionType: permissions.permissionType }) |
| 574 | + .from(permissions) |
| 575 | + .where( |
| 576 | + and( |
| 577 | + eq(permissions.userId, authenticatedUserId), |
| 578 | + eq(permissions.entityType, 'workspace'), |
| 579 | + eq(permissions.entityId, requestedWorkspaceId) |
| 580 | + ) |
| 581 | + ) |
| 582 | + .limit(1) |
| 583 | + |
| 584 | + if (!permissionRow) { |
| 585 | + return createBadRequestResponse('Workspace not found or access denied') |
| 586 | + } |
| 587 | + |
572 | 588 | return { |
573 | 589 | kind: 'workspace', |
574 | 590 | workspaceId: requestedWorkspaceId, |
|
0 commit comments