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 { Cache } from 'cache-manager';
|
||||||
import { Server, Socket } from 'socket.io';
|
import { Server, Socket } from 'socket.io';
|
||||||
import { PagePermissionRepo } from '@docmost/db/repos/page/page-permission.repo';
|
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 {
|
import {
|
||||||
TREE_EVENTS,
|
TREE_EVENTS,
|
||||||
WS_SPACE_RESTRICTION_CACHE_PREFIX,
|
WS_SPACE_RESTRICTION_CACHE_PREFIX,
|
||||||
@@ -18,6 +20,7 @@ export class WsService {
|
|||||||
constructor(
|
constructor(
|
||||||
private readonly pagePermissionRepo: PagePermissionRepo,
|
private readonly pagePermissionRepo: PagePermissionRepo,
|
||||||
@Inject(CACHE_MANAGER) private readonly cacheManager: Cache,
|
@Inject(CACHE_MANAGER) private readonly cacheManager: Cache,
|
||||||
|
private readonly spaceMemberRepo: SpaceMemberRepo,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
setServer(server: Server): void {
|
setServer(server: Server): void {
|
||||||
@@ -31,6 +34,18 @@ export class WsService {
|
|||||||
return;
|
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') {
|
if (data.operation === 'refetchRootTreeNodeEvent') {
|
||||||
client.broadcast.to(room).emit('message', data);
|
client.broadcast.to(room).emit('message', data);
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user