Compare commits

..

1 Commits

Author SHA1 Message Date
Narciso 165746ca46 fix(server): allow members to list servers on cloud 2026-10-07 11:54:03 -04:00
+9 -26
View File
@@ -20,8 +20,8 @@ import {
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import {
checkPermission,
findMemberByUserId,
hasPermission,
} from "@dokploy/server/services/permission";
import { hasValidLicense } from "@dokploy/server/services/proprietary/license-key";
import { TRPCError } from "@trpc/server";
@@ -54,22 +54,6 @@ import {
} from "@/server/db/schema";
import { applyDockerCleanupSchedule } from "@/server/utils/docker-cleanup";
// Users without server.read only get what the server pickers render
const toServerOptions = async (
ctx: Parameters<typeof hasPermission>[0],
servers: (typeof server.$inferSelect)[],
) => {
await findMemberByUserId(ctx.user.id, ctx.session.activeOrganizationId);
if (await hasPermission(ctx, { server: ["read"] })) {
return servers;
}
return servers.map(({ serverId, name, ipAddress }) => ({
serverId,
name,
ipAddress,
}));
};
export const serverRouter = createTRPCRouter({
create: withPermission("server", "create")
.input(apiCreateServer)
@@ -236,9 +220,14 @@ export const serverRouter = createTRPCRouter({
return servers.length ?? 0;
}),
withSSHKey: protectedProcedure.query(async ({ ctx }) => {
await checkPermission(
ctx,
IS_CLOUD ? { service: ["create"] } : { server: ["read"] },
);
const accessibleIds = await getAccessibleServerIds(ctx.session);
const result = await db.query.server.findMany({
columns: { serverId: true, name: true, ipAddress: true },
orderBy: desc(server.createdAt),
where: IS_CLOUD
? and(
@@ -253,12 +242,9 @@ export const serverRouter = createTRPCRouter({
eq(server.serverType, "deploy"),
),
});
return toServerOptions(
ctx,
result.filter((s) => accessibleIds.has(s.serverId)),
);
return result.filter((s) => accessibleIds.has(s.serverId));
}),
buildServers: protectedProcedure.query(async ({ ctx }) => {
buildServers: withPermission("server", "read").query(async ({ ctx }) => {
const accessibleIds = await getAccessibleServerIds(ctx.session);
const result = await db.query.server.findMany({
@@ -276,10 +262,7 @@ export const serverRouter = createTRPCRouter({
eq(server.serverType, "build"),
),
});
return toServerOptions(
ctx,
result.filter((s) => accessibleIds.has(s.serverId)),
);
return result.filter((s) => accessibleIds.has(s.serverId));
}),
setup: withPermission("server", "create")
.input(apiFindOneServer)