From 2a6d936fd43fa848209791ffa5b49e3179b87da9 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Tue, 8 Sep 2026 13:54:02 +0100 Subject: [PATCH] fix: ws relay --- apps/server/src/ws/ws.service.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/apps/server/src/ws/ws.service.ts b/apps/server/src/ws/ws.service.ts index 3278f72cb..170f2474b 100644 --- a/apps/server/src/ws/ws.service.ts +++ b/apps/server/src/ws/ws.service.ts @@ -3,6 +3,8 @@ import { CACHE_MANAGER } from '@nestjs/cache-manager'; import { Cache } from 'cache-manager'; import { Server, Socket } from 'socket.io'; import { PagePermissionRepo } from '@docmost/db/repos/page/page-permission.repo'; +import { SpaceMemberRepo } from '@docmost/db/repos/space/space-member.repo'; +import { SpaceRole } from '../common/helpers/types/permission'; import { TREE_EVENTS, WS_SPACE_RESTRICTION_CACHE_PREFIX, @@ -18,6 +20,7 @@ export class WsService { constructor( private readonly pagePermissionRepo: PagePermissionRepo, @Inject(CACHE_MANAGER) private readonly cacheManager: Cache, + private readonly spaceMemberRepo: SpaceMemberRepo, ) {} setServer(server: Server): void { @@ -31,6 +34,18 @@ export class WsService { return; } + const userSpaceRoles = await this.spaceMemberRepo.getUserSpaceRoles( + client.data.userId, + data.spaceId, + ); + const canPublish = userSpaceRoles?.some( + ({ role }) => role === SpaceRole.ADMIN || role === SpaceRole.WRITER, + ); + + if (!canPublish) { + return; + } + if (data.operation === 'refetchRootTreeNodeEvent') { client.broadcast.to(room).emit('message', data); return;