mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-07 12:30:12 +02:00
88 lines
1.7 KiB
TypeScript
88 lines
1.7 KiB
TypeScript
import { User } from '@prisma/client';
|
|
import { AuthUser } from '@middleware/authenticate';
|
|
import { prisma } from '../lib';
|
|
|
|
export enum Roles {
|
|
NONE = 0,
|
|
GUEST = 1,
|
|
USER = 2,
|
|
ADMIN = 4,
|
|
SUPERADMIN = 8,
|
|
}
|
|
|
|
export enum FolderRoles {
|
|
NONE = 0,
|
|
READ = 1,
|
|
WRITE = 2,
|
|
ADMIN = 4,
|
|
}
|
|
|
|
export const folderPermissions = async (
|
|
serverFolderIds: any[],
|
|
user: AuthUser
|
|
) => {
|
|
if (user.isAdmin) {
|
|
return true;
|
|
}
|
|
|
|
const serverFoldersWithAccess = await prisma.serverFolder.findMany({
|
|
where: {
|
|
OR: [
|
|
{
|
|
AND: [
|
|
{
|
|
serverFolderPermissions: {
|
|
some: { userId: { equals: user.id } },
|
|
},
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
});
|
|
|
|
const serverFoldersWithAccessIds = serverFoldersWithAccess.map(
|
|
(serverFolder) => serverFolder.id
|
|
);
|
|
|
|
const hasAccess = serverFolderIds.every((id) =>
|
|
serverFoldersWithAccessIds.includes(id)
|
|
);
|
|
|
|
return hasAccess;
|
|
};
|
|
|
|
export const getFolderPermissions = async (user: User) => {
|
|
if (user.isAdmin) {
|
|
const serverFoldersWithAccess = await prisma.serverFolder.findMany();
|
|
|
|
const serverFoldersWithAccessIds = serverFoldersWithAccess.map(
|
|
(serverFolder) => serverFolder.id
|
|
);
|
|
|
|
return serverFoldersWithAccessIds;
|
|
}
|
|
|
|
const serverFoldersWithAccess = await prisma.serverFolder.findMany({
|
|
where: {
|
|
OR: [
|
|
{
|
|
AND: [
|
|
{
|
|
serverFolderPermissions: {
|
|
some: { userId: { equals: user.id } },
|
|
},
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
});
|
|
|
|
const serverFoldersWithAccessIds = serverFoldersWithAccess.map(
|
|
(serverFolder) => serverFolder.id
|
|
);
|
|
|
|
return serverFoldersWithAccessIds;
|
|
};
|