Просмотр исходного кода

add a middleware to check whether the page is accessible

Yuki Takei 1 год назад
Родитель
Сommit
1656d77c70
1 измененных файлов с 16 добавлено и 0 удалено
  1. 16 0
      apps/app/src/server/service/yjs.ts

+ 16 - 0
apps/app/src/server/service/yjs.ts

@@ -68,6 +68,22 @@ class YjsService implements IYjsService {
 
     this.createIndexes();
 
+    // check accessible page
+    ysocketio.nsp?.use(async(socket, next) => {
+      // extract page id from namespace
+      const pageId = socket.nsp.name.replace(/\/yjs\|/, '');
+      const user = (socket.request as RequestWithUser).user; // should be injected by SocketIOService
+
+      const Page = mongoose.model<IPage, PageModel>('Page');
+      const isAccessible = await Page.isAccessiblePageByViewer(pageId, user);
+
+      if (!isAccessible) {
+        return next(new Error('Forbidden'));
+      }
+
+      return next();
+    });
+
     ysocketio.on('document-loaded', async(doc: Document) => {
       const pageId = doc.name;