Skip to content

Commit 30d5493

Browse files
authored
Merge pull request #4164 from Dokploy/fix/permission-checks-env-and-load-services
fix: correct permission checks for compose loadServices and env editing
2 parents f700017 + 91b4472 commit 30d5493

3 files changed

Lines changed: 42 additions & 9 deletions

File tree

apps/dokploy/components/dashboard/application/environment/show-environment.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,17 @@ export const ShowEnvironment = ({ id, type }: Props) => {
5656
const [isEnvVisible, setIsEnvVisible] = useState(true);
5757

5858
const mutationMap = {
59-
compose: () => api.compose.update.useMutation(),
60-
libsql: () => api.libsql.update.useMutation(),
61-
mariadb: () => api.mariadb.update.useMutation(),
62-
mongo: () => api.mongo.update.useMutation(),
63-
mysql: () => api.mysql.update.useMutation(),
64-
postgres: () => api.postgres.update.useMutation(),
65-
redis: () => api.redis.update.useMutation(),
59+
compose: () => api.compose.saveEnvironment.useMutation(),
60+
libsql: () => api.libsql.saveEnvironment.useMutation(),
61+
mariadb: () => api.mariadb.saveEnvironment.useMutation(),
62+
mongo: () => api.mongo.saveEnvironment.useMutation(),
63+
mysql: () => api.mysql.saveEnvironment.useMutation(),
64+
postgres: () => api.postgres.saveEnvironment.useMutation(),
65+
redis: () => api.redis.saveEnvironment.useMutation(),
6666
};
6767
const { mutateAsync, isPending } = mutationMap[type]
6868
? mutationMap[type]()
69-
: api.mongo.update.useMutation();
69+
: api.mongo.saveEnvironment.useMutation();
7070

7171
const form = useForm<EnvironmentSchema>({
7272
defaultValues: {

apps/dokploy/server/api/routers/compose.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ import {
6161
apiFindCompose,
6262
apiRandomizeCompose,
6363
apiRedeployCompose,
64+
apiSaveEnvironmentVariablesCompose,
6465
apiUpdateCompose,
6566
compose as composeTable,
6667
environments,
@@ -201,6 +202,31 @@ export const composeRouter = createTRPCRouter({
201202
});
202203
return updated;
203204
}),
205+
saveEnvironment: protectedProcedure
206+
.input(apiSaveEnvironmentVariablesCompose)
207+
.mutation(async ({ input, ctx }) => {
208+
await checkServicePermissionAndAccess(ctx, input.composeId, {
209+
envVars: ["write"],
210+
});
211+
const updated = await updateCompose(input.composeId, {
212+
env: input.env,
213+
});
214+
215+
if (!updated) {
216+
throw new TRPCError({
217+
code: "BAD_REQUEST",
218+
message: "Error adding environment variables",
219+
});
220+
}
221+
222+
await audit(ctx, {
223+
action: "update",
224+
resourceType: "compose",
225+
resourceId: input.composeId,
226+
resourceName: updated?.name,
227+
});
228+
return true;
229+
}),
204230
delete: protectedProcedure
205231
.input(apiDeleteCompose)
206232
.mutation(async ({ input, ctx }) => {
@@ -290,7 +316,7 @@ export const composeRouter = createTRPCRouter({
290316
.input(apiFetchServices)
291317
.query(async ({ input, ctx }) => {
292318
await checkServicePermissionAndAccess(ctx, input.composeId, {
293-
service: ["create"],
319+
service: ["read"],
294320
});
295321
return await loadServices(input.composeId, input.type);
296322
}),

packages/server/src/db/schema/compose.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,13 @@ export const apiUpdateCompose = createSchema
225225
})
226226
.omit({ serverId: true });
227227

228+
export const apiSaveEnvironmentVariablesCompose = createSchema
229+
.pick({
230+
composeId: true,
231+
env: true,
232+
})
233+
.required();
234+
228235
export const apiRandomizeCompose = createSchema
229236
.pick({
230237
composeId: true,

0 commit comments

Comments
 (0)