Skip to content
48 changes: 35 additions & 13 deletions app/api/views-dataroom/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ export async function POST(request: NextRequest) {
enableWatermark: true,
watermarkConfig: true,
groupId: true,
permissionGroupId: true,
audienceType: true,
allowDownload: true,
enableConversation: true,
Expand Down Expand Up @@ -854,10 +855,13 @@ export async function POST(request: NextRequest) {

// check if viewer can download the document based on group permissions
let canDownload: boolean = link.allowDownload ?? false;
const effectiveGroupId = link.groupId || link.permissionGroupId;

if (
link.allowDownload &&
link.audienceType === LinkAudienceType.GROUP &&
link.groupId &&
(link.audienceType === LinkAudienceType.GROUP ||
link.permissionGroupId) &&
effectiveGroupId &&
documentId &&
dataroomId
) {
Expand All @@ -873,18 +877,36 @@ export async function POST(request: NextRequest) {
if (!dataroomDocument) {
canDownload = false;
} else {
const groupDocumentPermission =
await prisma.viewerGroupAccessControls.findUnique({
where: {
groupId_itemId: {
groupId: link.groupId,
itemId: dataroomDocument.id,
if (link.groupId) {
// This is a ViewerGroup (legacy behavior)
const groupDocumentPermission =
await prisma.viewerGroupAccessControls.findUnique({
where: {
groupId_itemId: {
groupId: link.groupId,
itemId: dataroomDocument.id,
},
itemType: ItemType.DATAROOM_DOCUMENT,
},
itemType: ItemType.DATAROOM_DOCUMENT,
},
select: { canDownload: true },
});
canDownload = groupDocumentPermission?.canDownload ?? false;
select: { canDownload: true },
});
canDownload = groupDocumentPermission?.canDownload ?? false;
} else if (link.permissionGroupId) {
// This is a PermissionGroup (new behavior)
const permissionGroupDocumentPermission =
await prisma.permissionGroupAccessControls.findUnique({
where: {
groupId_itemId: {
groupId: link.permissionGroupId,
itemId: dataroomDocument.id,
},
itemType: ItemType.DATAROOM_DOCUMENT,
},
select: { canDownload: true },
});
canDownload =
permissionGroupDocumentPermission?.canDownload ?? false;
}
}
}

Expand Down
7 changes: 3 additions & 4 deletions components/datarooms/dataroom-header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@ import { BellRingIcon } from "lucide-react";

import { useDataroom, useDataroomLinks } from "@/lib/swr/use-dataroom";

import LinkSheet from "@/components/links/link-sheet";
import { DataroomLinkSheet } from "@/components/links/link-sheet/dataroom-link-sheet";
import { Button } from "@/components/ui/button";

import {
Tooltip,
TooltipContent,
TooltipPortal,
TooltipTrigger,
} from "../ui/tooltip";
} from "@/components/ui/tooltip";

export const DataroomHeader = ({
title,
Expand Down Expand Up @@ -70,7 +69,7 @@ export const DataroomHeader = ({
Share
</Button>
</div>
<LinkSheet
<DataroomLinkSheet
linkType={"DATAROOM_LINK"}
isOpen={isLinkSheetOpen}
setIsOpen={setIsLinkSheetOpen}
Expand Down
7 changes: 7 additions & 0 deletions components/links/link-sheet/dataroom-link-sheet.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"use client";

import { DataroomLinkSheet as DataroomLinkSheetEE } from "@/ee/features/permissions/components/dataroom-link-sheet";

export function DataroomLinkSheet(props: any) {
return <DataroomLinkSheetEE {...props} />;
}
12 changes: 7 additions & 5 deletions components/links/link-sheet/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ export const DEFAULT_LINK_PROPS = (
uploadFolderId: null,
uploadFolderName: "Home",
enableIndexFile: false,
permissions: () => ({}), // lazy factory
permissionGroupId: null,
});

export type DEFAULT_LINK_TYPE = {
Expand Down Expand Up @@ -129,6 +131,8 @@ export type DEFAULT_LINK_TYPE = {
uploadFolderId: string | null;
uploadFolderName: string;
enableIndexFile: boolean;
permissions?: any; // For dataroom links file permissions
permissionGroupId?: string | null;
};

export default function LinkSheet({
Expand Down Expand Up @@ -250,10 +254,8 @@ export default function LinkSheet({
enableAgreement: preset.enableAgreement || prev.enableAgreement,
agreementId: preset.agreementId || prev.agreementId,
enableScreenshotProtection:
preset.enableScreenshotProtection ||
prev.enableScreenshotProtection,
enableNotification:
!!preset.enableNotification,
preset.enableScreenshotProtection || prev.enableScreenshotProtection,
enableNotification: !!preset.enableNotification,
};
});

Expand Down Expand Up @@ -443,7 +445,7 @@ export default function LinkSheet({

return (
<Sheet open={isOpen} onOpenChange={(open: boolean) => setIsOpen(open)}>
<SheetContent className="flex w-[90%] flex-col justify-between border-l border-gray-200 bg-background px-4 text-foreground dark:border-gray-800 dark:bg-gray-900 sm:w-[600px] sm:max-w-2xl md:px-5">
<SheetContent className="flex w-[90%] flex-col justify-between border-l border-gray-200 bg-background px-4 text-foreground dark:border-gray-800 dark:bg-gray-900 sm:w-[800px] sm:max-w-4xl md:px-5">
<SheetHeader className="text-start">
<SheetTitle>
{currentLink
Expand Down
Loading