2024-06-02 11:01:10 +02:00
|
|
|
import type { Session } from "next-auth";
|
2024-04-30 21:32:55 +02:00
|
|
|
|
2024-07-08 00:00:37 +02:00
|
|
|
import type { BoardPermission } from "@homarr/definitions";
|
|
|
|
|
|
2024-04-30 21:32:55 +02:00
|
|
|
export type BoardPermissionsProps = (
|
|
|
|
|
| {
|
|
|
|
|
creator: {
|
|
|
|
|
id: string;
|
|
|
|
|
} | null;
|
|
|
|
|
}
|
|
|
|
|
| {
|
|
|
|
|
creatorId: string | null;
|
|
|
|
|
}
|
|
|
|
|
) & {
|
2024-05-04 18:34:41 +02:00
|
|
|
userPermissions: {
|
2024-07-08 00:00:37 +02:00
|
|
|
permission: BoardPermission;
|
2024-05-04 18:34:41 +02:00
|
|
|
}[];
|
|
|
|
|
groupPermissions: {
|
2024-07-08 00:00:37 +02:00
|
|
|
permission: BoardPermission;
|
2024-04-30 21:32:55 +02:00
|
|
|
}[];
|
|
|
|
|
isPublic: boolean;
|
|
|
|
|
};
|
|
|
|
|
|
2024-05-19 22:38:39 +02:00
|
|
|
export const constructBoardPermissions = (board: BoardPermissionsProps, session: Session | null) => {
|
2024-04-30 21:32:55 +02:00
|
|
|
const creatorId = "creator" in board ? board.creator?.id : board.creatorId;
|
|
|
|
|
|
|
|
|
|
return {
|
2025-03-18 20:34:38 +01:00
|
|
|
hasFullAccess:
|
|
|
|
|
session?.user.id === creatorId ||
|
|
|
|
|
board.userPermissions.some(({ permission }) => permission === "full") ||
|
|
|
|
|
board.groupPermissions.some(({ permission }) => permission === "full") ||
|
|
|
|
|
(session?.user.permissions.includes("board-full-all") ?? false),
|
2024-04-30 21:32:55 +02:00
|
|
|
hasChangeAccess:
|
2024-06-08 20:49:57 +02:00
|
|
|
session?.user.id === creatorId ||
|
2025-03-18 20:34:38 +01:00
|
|
|
board.userPermissions.some(({ permission }) => permission === "modify" || permission === "full") ||
|
|
|
|
|
board.groupPermissions.some(({ permission }) => permission === "modify" || permission === "full") ||
|
2024-09-20 16:51:42 +02:00
|
|
|
(session?.user.permissions.includes("board-modify-all") ?? false) ||
|
|
|
|
|
(session?.user.permissions.includes("board-full-all") ?? false),
|
2024-04-30 21:32:55 +02:00
|
|
|
hasViewAccess:
|
2024-06-08 20:49:57 +02:00
|
|
|
session?.user.id === creatorId ||
|
2024-05-04 18:34:41 +02:00
|
|
|
board.userPermissions.length >= 1 ||
|
|
|
|
|
board.groupPermissions.length >= 1 ||
|
|
|
|
|
board.isPublic ||
|
2024-09-20 16:51:42 +02:00
|
|
|
(session?.user.permissions.includes("board-view-all") ?? false),
|
2024-04-30 21:32:55 +02:00
|
|
|
};
|
|
|
|
|
};
|