mirror of
https://github.com/docmost/docmost.git
synced 2026-09-11 07:56:54 +08:00
fix: ws relay
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user