From 317e7cab3c31a9722695778f73dd7c1ccf6e56e6 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 23 Feb 2026 16:53:43 +0000 Subject: [PATCH] fix: prevent cross-workspace access on member and permission endpoints --- packages/api/src/routers/member.ts | 5 +++-- packages/api/src/routers/permission.ts | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/api/src/routers/member.ts b/packages/api/src/routers/member.ts index 615496c0..b5b55d30 100644 --- a/packages/api/src/routers/member.ts +++ b/packages/api/src/routers/member.ts @@ -210,11 +210,12 @@ export const memberRouter = createTRPCRouter({ input.memberPublicId, ); - if (!member) + if (!member || member.workspaceId !== workspace.id) { throw new TRPCError({ message: `Member with public ID ${input.memberPublicId} not found`, code: "NOT_FOUND", }); + } const deletedMember = await memberRepo.softDelete(ctx.db, { memberId: member.id, @@ -720,7 +721,7 @@ export const memberRouter = createTRPCRouter({ input.memberPublicId, ); - if (!member) { + if (!member || member.workspaceId !== workspace.id) { throw new TRPCError({ message: "Member not found", code: "NOT_FOUND", diff --git a/packages/api/src/routers/permission.ts b/packages/api/src/routers/permission.ts index f62e1082..b476a937 100644 --- a/packages/api/src/routers/permission.ts +++ b/packages/api/src/routers/permission.ts @@ -133,7 +133,7 @@ export const permissionRouter = createTRPCRouter({ input.memberPublicId, ); - if (!member) { + if (!member || member.workspaceId !== workspace.id) { throw new TRPCError({ message: "Member not found", code: "NOT_FOUND", @@ -209,7 +209,7 @@ export const permissionRouter = createTRPCRouter({ input.memberPublicId, ); - if (!member) { + if (!member || member.workspaceId !== workspace.id) { throw new TRPCError({ message: "Member not found", code: "NOT_FOUND", @@ -274,7 +274,7 @@ export const permissionRouter = createTRPCRouter({ input.memberPublicId, ); - if (!member) { + if (!member || member.workspaceId !== workspace.id) { throw new TRPCError({ message: "Member not found", code: "NOT_FOUND", @@ -339,7 +339,7 @@ export const permissionRouter = createTRPCRouter({ input.memberPublicId, ); - if (!member) { + if (!member || member.workspaceId !== workspace.id) { throw new TRPCError({ message: "Member not found", code: "NOT_FOUND",