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

Merge pull request #10730 from growilabs/imprv/177492-exclude-user-pages-from-bookmark-data-when-user-pages-are-hidden

imprv: Exclude user pages from bookmark data when user pages are hidden
Yuki Takei 2 месяцев назад
Родитель
Сommit
17d349006f
1 измененных файлов с 20 добавлено и 2 удалено
  1. 20 2
      apps/app/src/server/routes/apiv3/bookmarks.ts

+ 20 - 2
apps/app/src/server/routes/apiv3/bookmarks.ts

@@ -1,6 +1,10 @@
 import type { IUserHasId } from '@growi/core';
 import type { IUserHasId } from '@growi/core';
 import { SCOPE } from '@growi/core/dist/interfaces';
 import { SCOPE } from '@growi/core/dist/interfaces';
 import { serializeUserSecurely } from '@growi/core/dist/models/serializers';
 import { serializeUserSecurely } from '@growi/core/dist/models/serializers';
+import {
+  isUserPage,
+  isUsersTopPage,
+} from '@growi/core/dist/utils/page-path-utils';
 import mongoose, { type HydratedDocument } from 'mongoose';
 import mongoose, { type HydratedDocument } from 'mongoose';
 
 
 import { SupportedAction, SupportedTargetModel } from '~/interfaces/activity';
 import { SupportedAction, SupportedTargetModel } from '~/interfaces/activity';
@@ -10,6 +14,7 @@ import { generateAddActivityMiddleware } from '~/server/middlewares/add-activity
 import type { BookmarkDocument, BookmarkModel } from '~/server/models/bookmark';
 import type { BookmarkDocument, BookmarkModel } from '~/server/models/bookmark';
 import type { PageDocument, PageModel } from '~/server/models/page';
 import type { PageDocument, PageModel } from '~/server/models/page';
 import { serializeBookmarkSecurely } from '~/server/models/serializers/bookmark-serializer';
 import { serializeBookmarkSecurely } from '~/server/models/serializers/bookmark-serializer';
+import { configManager } from '~/server/service/config-manager';
 import { preNotifyService } from '~/server/service/pre-notify';
 import { preNotifyService } from '~/server/service/pre-notify';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
@@ -237,11 +242,12 @@ module.exports = (crowi) => {
           'bookmarks',
           'bookmarks',
           { owner: userId },
           { owner: userId },
         );
         );
+
         const userRootBookmarks = await Bookmark.find({
         const userRootBookmarks = await Bookmark.find({
           _id: { $nin: bookmarkIdsInFolders },
           _id: { $nin: bookmarkIdsInFolders },
           user: userId,
           user: userId,
         })
         })
-          .populate({
+          .populate<{ page: PageDocument }>({
             path: 'page',
             path: 'page',
             model: 'Page',
             model: 'Page',
             populate: {
             populate: {
@@ -251,8 +257,20 @@ module.exports = (crowi) => {
           })
           })
           .exec();
           .exec();
 
 
+        const isHidingUserPages = configManager.getConfig(
+          'security:isHidingUserPages',
+        );
+
+        const filteredBookmarks = isHidingUserPages
+          ? userRootBookmarks.filter(
+              (bookmark) =>
+                !isUserPage(bookmark.page.path) &&
+                !isUsersTopPage(bookmark.page.path),
+            )
+          : userRootBookmarks;
+
         // serialize Bookmark
         // serialize Bookmark
-        const serializedUserRootBookmarks = userRootBookmarks.map((bookmark) =>
+        const serializedUserRootBookmarks = filteredBookmarks.map((bookmark) =>
           serializeBookmarkSecurely(bookmark),
           serializeBookmarkSecurely(bookmark),
         );
         );