ryoji-s 2 jaren geleden
bovenliggende
commit
4d81862ab5
2 gewijzigde bestanden met toevoegingen van 17 en 15 verwijderingen
  1. 9 5
      apps/app/src/server/routes/page.js
  2. 8 10
      apps/app/src/server/service/page.ts

+ 9 - 5
apps/app/src/server/routes/page.js

@@ -136,7 +136,7 @@ module.exports = function(crowi, app) {
   const debug = require('debug')('growi:routes:page');
   const logger = loggerFactory('growi:routes:page');
 
-  const { pathUtils } = require('@growi/core/dist/utils');
+  const { pathUtils, pagePathUtils } = require('@growi/core/dist/utils');
 
   const Page = crowi.model('Page');
   const User = crowi.model('User');
@@ -766,8 +766,10 @@ module.exports = function(crowi, app) {
           return res.json(ApiResponse.error('You can not delete this page completely', 'user_not_admin'));
         }
 
-        if (!await crowi.pageService.canDeleteUserHomepage(page.path)) {
-          return res.json(ApiResponse.error('Could not delete user homepage'));
+        if (pagePathUtils.isUsersHomepage(page.path)) {
+          if (!await crowi.pageService.canDeleteUserHomepage(page.path)) {
+            return res.json(ApiResponse.error('Could not delete user homepage'));
+          }
         }
 
         await crowi.pageService.deleteCompletely(page, req.user, options, isRecursively, false, activityParameters);
@@ -787,8 +789,10 @@ module.exports = function(crowi, app) {
           return res.json(ApiResponse.error('You can not delete this page', 'user_not_admin'));
         }
 
-        if (!await crowi.pageService.canDeleteUserHomepage(page.path)) {
-          return res.json(ApiResponse.error('Could not delete user homepage'));
+        if (pagePathUtils.isUsersHomepage(page.path)) {
+          if (!await crowi.pageService.canDeleteUserHomepage(page.path)) {
+            return res.json(ApiResponse.error('Could not delete user homepage'));
+          }
         }
 
         await crowi.pageService.deletePage(page, req.user, options, isRecursively, activityParameters);

+ 8 - 10
apps/app/src/server/service/page.ts

@@ -47,7 +47,7 @@ const debug = require('debug')('growi:services:page');
 const logger = loggerFactory('growi:services:page');
 const {
   isTrashPage, isTopPage, omitDuplicateAreaPageFromPages, getUsernameByPath,
-  canMoveByPath, isUsersTopPage, isUsersHomepage, isUsersProtectedPages, hasSlash, generateChildrenRegExp,
+  canMoveByPath, isUsersTopPage, isMovablePage, isUsersHomepage, hasSlash, generateChildrenRegExp,
 } = pagePathUtils;
 
 const { addTrailingSlash } = pathUtils;
@@ -188,10 +188,6 @@ class PageService {
   }
 
   async canDeleteUserHomepage(path: string): Promise<boolean> {
-    if (!isUsersHomepage(path)) {
-      return true;
-    }
-
     const isUsersHomepageDeletionEnabled = configManager.getConfig('crowi', 'security:user-homepage-deletion:isEnabled');
     if (!isUsersHomepageDeletionEnabled) {
       return false;
@@ -199,8 +195,8 @@ class PageService {
 
     const User = mongoose.model('User');
     const username = getUsernameByPath(path);
-    const userHomepageOwner = await User.findOne<Promise<IUserHasId | null>>({ username });
-    return userHomepageOwner === null;
+    const userExists = await User.exists({ username });
+    return userExists === null;
   }
 
   private canDeleteLogic(
@@ -1406,8 +1402,10 @@ class PageService {
       throw new Error('Page is not deletable.');
     }
 
-    if (!await this.canDeleteUserHomepage(page.path)) {
-      throw new Error('User Homepage is not deletable.');
+    if (isUsersHomepage(page.path)) {
+      if (!await this.canDeleteUserHomepage(page.path)) {
+        throw new Error('User Homepage is not deletable.');
+      }
     }
 
     const newPath = Page.getDeletedPageName(page.path);
@@ -1555,7 +1553,7 @@ class PageService {
     }
 
     // a protected page is not deletable regardless of the configuration settings in v4
-    if (isTopPage(page.path) || isUsersProtectedPages(page.path)) {
+    if (!isMovablePage(page.path)) {
       throw new Error('Page is not deletable.');
     }