mirror of
https://github.com/documenso/documenso.git
synced 2025-11-13 16:23:06 +10:00
fix: visibility
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
import type { Prisma } from '@prisma/client';
|
import type { Prisma } from '@prisma/client';
|
||||||
import { TeamMemberRole } from '@prisma/client';
|
import { DocumentStatus, TeamMemberRole } from '@prisma/client';
|
||||||
import { match } from 'ts-pattern';
|
import { match } from 'ts-pattern';
|
||||||
|
|
||||||
import { prisma } from '@documenso/prisma';
|
import { prisma } from '@documenso/prisma';
|
||||||
@ -83,10 +83,46 @@ export const getDocumentWhereInput = async ({
|
|||||||
}: GetDocumentWhereInputOptions) => {
|
}: GetDocumentWhereInputOptions) => {
|
||||||
const team = await getTeamById({ teamId, userId });
|
const team = await getTeamById({ teamId, userId });
|
||||||
|
|
||||||
|
const user = await prisma.user.findFirstOrThrow({
|
||||||
|
where: {
|
||||||
|
id: userId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const teamVisibilityFilters = match(team.currentTeamRole)
|
||||||
|
.with(TeamMemberRole.ADMIN, () => [
|
||||||
|
DocumentVisibility.EVERYONE,
|
||||||
|
DocumentVisibility.MANAGER_AND_ABOVE,
|
||||||
|
DocumentVisibility.ADMIN,
|
||||||
|
])
|
||||||
|
.with(TeamMemberRole.MANAGER, () => [
|
||||||
|
DocumentVisibility.EVERYONE,
|
||||||
|
DocumentVisibility.MANAGER_AND_ABOVE,
|
||||||
|
])
|
||||||
|
.otherwise(() => [DocumentVisibility.EVERYONE]);
|
||||||
|
|
||||||
const documentOrInput: Prisma.DocumentWhereInput[] = [
|
const documentOrInput: Prisma.DocumentWhereInput[] = [
|
||||||
|
// Allow access if they own the document.
|
||||||
{
|
{
|
||||||
userId: userId,
|
userId,
|
||||||
teamId: team.id,
|
},
|
||||||
|
// Or, if they belong to the team that the document is associated with.
|
||||||
|
{
|
||||||
|
visibility: {
|
||||||
|
in: teamVisibilityFilters,
|
||||||
|
},
|
||||||
|
teamId,
|
||||||
|
},
|
||||||
|
// Or, if they are a recipient of the document.
|
||||||
|
{
|
||||||
|
status: {
|
||||||
|
not: DocumentStatus.DRAFT,
|
||||||
|
},
|
||||||
|
recipients: {
|
||||||
|
some: {
|
||||||
|
email: user.email,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -113,45 +149,8 @@ export const getDocumentWhereInput = async ({
|
|||||||
OR: documentOrInput,
|
OR: documentOrInput,
|
||||||
};
|
};
|
||||||
|
|
||||||
const user = await prisma.user.findFirstOrThrow({
|
|
||||||
where: {
|
|
||||||
id: userId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const visibilityFilters = [
|
|
||||||
...match(team.currentTeamRole)
|
|
||||||
.with(TeamMemberRole.ADMIN, () => [
|
|
||||||
{ visibility: DocumentVisibility.EVERYONE },
|
|
||||||
{ visibility: DocumentVisibility.MANAGER_AND_ABOVE },
|
|
||||||
{ visibility: DocumentVisibility.ADMIN },
|
|
||||||
])
|
|
||||||
.with(TeamMemberRole.MANAGER, () => [
|
|
||||||
{ visibility: DocumentVisibility.EVERYONE },
|
|
||||||
{ visibility: DocumentVisibility.MANAGER_AND_ABOVE },
|
|
||||||
])
|
|
||||||
.otherwise(() => [{ visibility: DocumentVisibility.EVERYONE }]),
|
|
||||||
{
|
|
||||||
OR: [
|
|
||||||
{
|
|
||||||
recipients: {
|
|
||||||
some: {
|
|
||||||
email: user.email,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
userId: user.id,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
documentWhereInput: {
|
documentWhereInput,
|
||||||
...documentWhereInput,
|
|
||||||
// OR: [...visibilityFilters],
|
|
||||||
},
|
|
||||||
team,
|
team,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user