zahmis 5 ani în urmă
părinte
comite
4d3bd82ca1
2 a modificat fișierele cu 25 adăugiri și 27 ștergeri
  1. 21 0
      src/server/models/page.js
  2. 4 27
      src/server/routes/apiv3/pages.js

+ 21 - 0
src/server/models/page.js

@@ -700,6 +700,27 @@ module.exports = function(crowi) {
     return await findListFromBuilderAndViewer(builder, user, false, option);
   };
 
+  /**
+   * find pages that is match with `path` and its descendants whitch user is able to manage
+   */
+  pageSchema.statics.findManageableListWithDescendants = async function(page, user, option = {}) {
+    const builder = new PageQueryBuilder(this.find());
+    builder.addConditionToListWithDescendants(page.path, option);
+    builder.addConditionToExcludeRedirect();
+
+    // add grant conditions
+    await addConditionToFilteringByViewerToEdit(builder, user);
+    const { pages } = await findListFromBuilderAndViewer(builder, user, false, option);
+
+    // add page if 'grant' is GRANT_RESTRICTED
+    // because addConditionToListWithDescendants excludes GRANT_RESTRICTED pages
+    if (page.grant === GRANT_RESTRICTED) {
+      pages.push(page);
+    }
+
+    return pages;
+  };
+
   /**
    * find pages that start with `path`
    */

+ 4 - 27
src/server/routes/apiv3/pages.js

@@ -3,10 +3,6 @@ const loggerFactory = require('@alias/logger');
 const logger = loggerFactory('growi:routes:apiv3:pages'); // eslint-disable-line no-unused-vars
 
 const express = require('express');
-const mongoose = require('mongoose');
-
-const Page = mongoose.model('Page');
-const { PageQueryBuilder } = Page;
 
 
 const router = express.Router();
@@ -24,24 +20,6 @@ module.exports = (crowi) => {
 
   const Page = crowi.model('Page');
 
-  function validateCrowi() {
-    if (crowi == null) {
-      throw new Error('"crowi" is null. Init User model with "crowi" argument first.');
-    }
-  }
-
-  async function addConditionToFilteringByViewerToEdit(builder, user) {
-    validateCrowi();
-
-    // determine UserGroup condition
-    let userGroups = null;
-    if (user != null) {
-      const UserGroupRelation = crowi.model('UserGroupRelation');
-      userGroups = await UserGroupRelation.findAllUserGroupIdsRelatedToUser(user);
-    }
-
-    return builder.addConditionToFilteringByViewer(user, userGroups, false, false, false);
-  }
 
   /**
    * @swagger
@@ -108,17 +86,16 @@ module.exports = (crowi) => {
 
   router.get('/duplicate', accessTokenParser, loginRequired, async(req, res) => {
     const { path } = req.query;
-    const builder = new PageQueryBuilder(this.find());
-
     // const result = await Page.findListWithDescendants(path, req.user);
     // const pages = result.pages;
     // const duplicatePaths = pages.map(element => element.path);
     // console.log(duplicatePaths);
     // console.log(req.user);
 
-    await addConditionToFilteringByViewerToEdit(builder);
-    console.log(builder);
-    return res.apiv3({ path });
+    const result = await Page.findManageableListWithDescendants(req.page, req.user);
+    console.log(result);
+    console.log(path);
+    return res.apiv3({});
   });
 
   return router;