阻止在silverstripe中发布所有内容

时间:2015-07-12 22:33:23

标签: php silverstripe

Silverstripe能够让用户在/ admin / pages / publishall上的网站上发布所有页面,并且发布所有代码都在/cms/code/controllers/CMSMain.php

我们遇到了一些问题,如果用户只是在其他环境中运行时,会意外地在生产中运行发布 - 如何禁用发布功能?

1 个答案:

答案 0 :(得分:1)

我解决此问题的第一种方法是创建一个自定义CMSPageController.php,我将在其中覆盖publishall,并在if块中调用parent :: publishall($ request)来检查我们所处的环境。这种方法的问题在于注入自定义类会产生编辑页面的问题。理想情况下,我本来可以扩展publishall,但正如上面提到的Nunser,Silverstripe(令人沮丧地)没有在该方法中包含扩展钩子。

我最终创建了一个自定义路由来覆盖admin / pages / publishall

所以在mysite / _config / routes.yml

里面
'admin/pages/publishall': CustomPublishallController

和mysite / code / controllers / 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);
    }

}