Merge pull request #5613 from Dokploy/fix/member-server-list

fix(server): let members list servers in server pickers
This commit is contained in:
Yash Kumar
2026-10-15 00:30:43 +05:30
committed by GitHub
+30 -5
View File
@@ -20,7 +20,10 @@ import {
updateServerById,
} from "@dokploy/server";
import { db } from "@dokploy/server/db";
import { findMemberByUserId } from "@dokploy/server/services/permission";
import {
findMemberByUserId,
hasPermission,
} from "@dokploy/server/services/permission";
import { hasValidLicense } from "@dokploy/server/services/proprietary/license-key";
import { TRPCError } from "@trpc/server";
import { observable } from "@trpc/server/observable";
@@ -52,6 +55,22 @@ 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)
@@ -217,7 +236,7 @@ export const serverRouter = createTRPCRouter({
return servers.length ?? 0;
}),
withSSHKey: withPermission("server", "read").query(async ({ ctx }) => {
withSSHKey: protectedProcedure.query(async ({ ctx }) => {
const accessibleIds = await getAccessibleServerIds(ctx.session);
const result = await db.query.server.findMany({
@@ -235,9 +254,12 @@ export const serverRouter = createTRPCRouter({
eq(server.serverType, "deploy"),
),
});
return result.filter((s) => accessibleIds.has(s.serverId));
return toServerOptions(
ctx,
result.filter((s) => accessibleIds.has(s.serverId)),
);
}),
buildServers: withPermission("server", "read").query(async ({ ctx }) => {
buildServers: protectedProcedure.query(async ({ ctx }) => {
const accessibleIds = await getAccessibleServerIds(ctx.session);
const result = await db.query.server.findMany({
@@ -255,7 +277,10 @@ export const serverRouter = createTRPCRouter({
eq(server.serverType, "build"),
),
});
return result.filter((s) => accessibleIds.has(s.serverId));
return toServerOptions(
ctx,
result.filter((s) => accessibleIds.has(s.serverId)),
);
}),
setup: withPermission("server", "create")
.input(apiFindOneServer)