2015-07-12 89 views
2

Silverstripe對用戶發佈的可用/管理/頁/ publishall一個網站的所有網頁和發佈所有的代碼是在/cms/code/controllers/CMSMain.php防止發佈所有在silverstripe

的能力我們遇到了一些問題,用戶意外地在生產環境中運行發佈時,只能從其他環境運行發佈 - 我如何禁用publishall功能?

+1

他們是否「不小心」也按下了「確認」按鈕?用戶,對吧?你正在運行什麼版本的ss?由於我沒有看到擴展該功能的任何掛鉤或任何dev dev的檢查,所以除非修改代碼(不要這樣做),否則您可能無法禁用該功能。它確實檢查管理員權限,所以你可以創建一個新的角色,爲其他用戶設置幾乎所有的權限,只是不給他們ADMIN權限,它會沒事的。 – Nunser

+0

問題在於管理員用戶在生產中運行publishall時認爲他們在開發中。 – jamckp

回答

1

我的第一個解決這個問題的方法是創建一個自定義的CMSPageController.php,其中我將覆蓋publishall,並且只需調用parent :: publishall($ request)就可以檢查我們所處的環境。這種方法的問題是注入自定義類創建問題與編輯頁面。理想情況下,我只能擴展publishall,但像上面提到的Nunser一樣,Silverstripe(令人沮喪地)沒有在該方法中包含擴展鉤子。

我結束了創建自定義路線覆蓋管理/頁/ publishall

所以內部的mysite/_config/routes.yml

'admin/pages/publishall': CustomPublishallController 

和mysite的/代碼/控制器/ CustomPublishallController.php

<?php 

/** 
* Controller for providing silverstripes inbuilt publishall functionality with the ability to 
* run in production removed. 
* 
* @package sitename 
* @subpackage mysite 
*/ 
class CustomPublishallController extends Controller { 

    public function index($request){ 

     $cmsMain = new CMSMain(); 

     if(ENVIRONMENT_CONSTANT != 'prod'){ 
      return $cmsMain->publishall($request); 
     } 
     return Security::permissionFailure($this); 
    } 

}