mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-16 13:40:24 +02:00
Move server directory outside of frontend src
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
import { AuthUser } from '@/middleware';
|
||||
import { ApiError } from '@/utils';
|
||||
import { prisma } from '@lib/prisma';
|
||||
|
||||
const checkServerPermissions = (
|
||||
user: AuthUser,
|
||||
options: { serverId?: string }
|
||||
) => {
|
||||
const { serverId } = options;
|
||||
|
||||
if (user.isAdmin || !serverId) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (serverId && !user.flatServerPermissions.includes(serverId)) {
|
||||
throw ApiError.forbidden();
|
||||
}
|
||||
};
|
||||
|
||||
const checkServerFolderPermissions = (
|
||||
user: AuthUser,
|
||||
options: { serverFolderId?: string[] | string }
|
||||
) => {
|
||||
const { serverFolderId } = options;
|
||||
|
||||
if (user.isAdmin || !serverFolderId) {
|
||||
return;
|
||||
}
|
||||
|
||||
let ids: string[] = [];
|
||||
if (typeof serverFolderId === 'string') {
|
||||
ids = [serverFolderId];
|
||||
} else if (typeof serverFolderId === 'object') {
|
||||
ids = serverFolderId;
|
||||
}
|
||||
|
||||
for (const id of ids) {
|
||||
if (!user.flatServerFolderPermissions.includes(id)) {
|
||||
throw ApiError.forbidden('');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const getAvailableServerFolderIds = async (
|
||||
user: AuthUser,
|
||||
options: { serverId: string }
|
||||
) => {
|
||||
const { serverId } = options;
|
||||
|
||||
if (user.isAdmin) {
|
||||
const serverFoldersWithAccess = await prisma.serverFolder.findMany({
|
||||
where: { serverId },
|
||||
});
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
const serverFolderFilter = (serverFolderIds: string[]) => {
|
||||
return {
|
||||
serverFolders: { every: { id: { in: serverFolderIds } } },
|
||||
};
|
||||
};
|
||||
|
||||
const paginationParams = (options: { skip: any; take: any }) => {
|
||||
const { skip, take } = options;
|
||||
|
||||
return {
|
||||
skip: Number(skip),
|
||||
take: Number(take),
|
||||
};
|
||||
};
|
||||
|
||||
export const sharedHelpers = {
|
||||
checkServerFolderPermissions,
|
||||
checkServerPermissions,
|
||||
getAvailableServerFolderIds,
|
||||
params: {
|
||||
pagination: paginationParams,
|
||||
},
|
||||
serverFolderFilter,
|
||||
};
|
||||
Reference in New Issue
Block a user