
## GC-1894

完全削除ボタンが押された時に呼ばれるのは

203行目
  ``` 
  app.post('/_api/pages.remove'       , loginRequired(crowi, app) , csrf, page.api.remove); // (Avoid from API Token)
```

ここで権限の確認を行う。

## page.jsの920~975行目


```
api.remove = async function(req, res) {
    const pageId = req.body.page_id;
    const previousRevision = req.body.revision_id || null;
    const socketClientId = req.body.socketClientId || undefined;

    // get completely flag
    const isCompletely = (req.body.completely != null);
    // get recursively flag
    const isRecursively = (req.body.recursively != null);

    const options = { socketClientId };

    let page = await Page.findByIdAndViewer(pageId, req.user);

    if (page == null) {
      return res.json(ApiResponse.error(`Page '${pageId}' is not found or forbidden`, 'notfound_or_forbidden'));
    }

    debug('Delete page', page._id, page.path);

    try {
      if (isCompletely) {
        if (isRecursively) {
          page = await Page.completelyDeletePageRecursively(page, req.user, options);
        }
        else {
          page = await Page.completelyDeletePage(page, req.user, options);
        }
      }
      else {
        if (!page.isUpdatable(previousRevision)) {
          return res.json(ApiResponse.error('Someone could update this page, so couldn\'t delete.', 'outdated'));
        }

        if (isRecursively) {
          page = await Page.deletePageRecursively(page, req.user, options);
        }
        else {
          page = await Page.deletePage(page, req.user, options);
        }
      }
    }
    catch (err) {
      logger.error('Error occured while get setting', err);
      return res.json(ApiResponse.error('Failed to delete page.', 'unknown'));
    }

    debug('Page deleted', page.path);
    const result = {};
    result.page = page; // TODO consider to use serializeToObj method -- 2018.08.06 Yuki Takei

    res.json(ApiResponse.success(result));

    // global notification
    return globalNotificationService.notifyPageDelete(page);
  };
```

## 呼ばれているものを確認する


![](https://i.gyazo.com/d7154134479afbd481d9b89c9681be44.png)
ここでブロックする！

![](https://i.gyazo.com/136713af624c926d332c63ef05ff9e6d.png)

ブロックできている

今は`page != null`で実装したため、userがadminかどうかをチェックする。

![](https://i.gyazo.com/3c3b32b0a46ff1ca4a04cd8f7af4771d.png)

エラーに飛んでしまう。

`this.user.admin`では呼び出せていない。


## 実は req に情報が多数渡されていた！

apiで渡そうとしているのはbody.caram.queryなど一部しかない

そのため今回権限を確認するのは`rew.user.admin`でよい！



---

## Page Navigation

- Canonical URL: https://dev.growi.org/開発日記/管理者以外が完全削除できないようにする/サーバー側の処理
- Permalink: https://dev.growi.org/5cf5e29e65d647003e362a36
- Parent: [管理者以外が完全削除できないようにする](/5ce4d38f55e1fe003e85a174.md)
- Children: 0 total
- Total descendants: 0
- Siblings: 3 total
  - [i18n](/5d09e52a1fe336003eec5c17.md)
  - [migrateファイル](/5d104b266896510041d68724.md)
  - [機能のON OFFの切り替え](/5ce6418625d6b400484fc868.md)
- Last updated: 2019-06-04T06:36:47.057Z by itizawa
- Full page listing (all children regardless of count): https://dev.growi.org/_api/v3/page-listing/children?id=5cf5e29e65d647003e362a36
