فهرست منبع

create can delete user homepage

ryoji-s 2 سال پیش
والد
کامیت
7e5a6f84dc
2فایلهای تغییر یافته به همراه32 افزوده شده و 15 حذف شده
  1. 11 2
      apps/app/src/server/routes/page.js
  2. 21 13
      apps/app/src/server/service/page.ts

+ 11 - 2
apps/app/src/server/routes/page.js

@@ -762,9 +762,14 @@ module.exports = function(crowi, app) {
 
     try {
       if (isCompletely) {
-        if (!await crowi.pageService.canDeleteCompletelyPromise(page.path, creator, req.user, isRecursively)) {
+        if (!crowi.pageService.canDeleteCompletely(page.path, creator, req.user, isRecursively)) {
           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'));
+        }
+
         await crowi.pageService.deleteCompletely(page, req.user, options, isRecursively, false, activityParameters);
       }
       else {
@@ -778,10 +783,14 @@ module.exports = function(crowi, app) {
           return res.json(ApiResponse.error('Someone could update this page, so couldn\'t delete.', 'outdated'));
         }
 
-        if (!await crowi.pageService.canDeletePromise(page.path, creator, req.user, isRecursively)) {
+        if (!crowi.pageService.canDelete(page.path, creator, req.user, isRecursively)) {
           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'));
+        }
+
         await crowi.pageService.deletePage(page, req.user, options, isRecursively, activityParameters);
       }
     }

+ 21 - 13
apps/app/src/server/service/page.ts

@@ -5,7 +5,7 @@ import type {
   Ref, HasObjectId, IUserHasId,
   IPage, IPageInfo, IPageInfoAll, IPageInfoForEntity, IPageWithMeta,
 } from '@growi/core';
-import { PageGrant, PageStatus, USER_STATUS } from '@growi/core';
+import { PageGrant, PageStatus } from '@growi/core';
 import {
   pagePathUtils, pathUtils,
 } from '@growi/core/dist/utils';
@@ -191,6 +191,24 @@ class PageService {
     return this.canDeleteLogic(creatorId, operator, isRecursively, singleAuthority, recursiveAuthority);
   }
 
+  async canDeleteUserHomepage(path: string): Promise<boolean> {
+    if (isUsersHomepage(path)) {
+      const isUsersHomepageDeletionEnabled = configManager.getConfig('crowi', 'security:user-homepage-deletion:isEnabled');
+      if (!isUsersHomepageDeletionEnabled) {
+        return false;
+      }
+
+      const User = mongoose.model('User');
+      const username = getUsernameByPath(path);
+      const userHomepageOwner = await User.findOne<Promise<IUserHasId | null>>({ username });
+      if (userHomepageOwner != null) {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
   private canDeleteLogic(
       creatorId: ObjectIdLike,
       operator,
@@ -1394,18 +1412,8 @@ class PageService {
       throw new Error('Page is not deletable.');
     }
 
-    if (isUsersHomepage(page.path)) {
-      const isUsersHomepageDeletionEnabled = configManager.getConfig('crowi', 'security:user-homepage-deletion:isEnabled');
-      if (!isUsersHomepageDeletionEnabled) {
-        throw new Error('Page is not deletable.');
-      }
-
-      const User = mongoose.model('User');
-      const username = getUsernameByPath(page.path);
-      const userHomepageOwner = await User.findOne<Promise<IUserHasId | null>>({ username });
-      if (userHomepageOwner != null) {
-        throw new Error('Page is not deletable.');
-      }
+    if (!await this.canDeleteUserHomepage(page.path)) {
+      throw new Error('User Homepage is not deletable.');
     }
 
     const newPath = Page.getDeletedPageName(page.path);