我怎样才能拒绝test.ctp并允许home.ctp给CakePHP中的匿名用户?

时间:2013-01-17 20:07:51

标签: cakephp authentication cakephp-2.1

我在CakePHP 2中使用AuthComponent。

我想向匿名用户展示“主页”视图并拒绝“测试”视图。

两个视图都位于文件夹Views / Pages

如果我使用此代码:

public function beforeFilter(){
    parent::beforeFilter(); //calling parents before filter
    $this->Auth->allow('home'); //allowing home only for pages controller
}

在我的PagesController中我无法访问PagesController的任何页面,包括home.ctp。

如果我使用:

$this->Auth->allow('display')

在我的PagesController中,我可以访问PagesController的任何页面,包括test.ctp。

我该如何解决这个问题?

我尝试在PagesController名称home()上创建一个新方法。但没有成功。

2 个答案:

答案 0 :(得分:1)

这是一个很好的答案。 Allowing a Specific Page in Cakephp

请记住,Auth-> allow适用于方法。显示是页面控制器中的方法。主页被视为显示中使用的变量。因此,您必须在Pages控制器中以编程方式执行此操作。

答案 1 :(得分:1)

情况一:如果您不想使用CakePHP的默认“显示”功能。

在PagesController中创建一个名为home()的新方法, 您还必须更改文件app \ Config \ routes.php中的代码,如下所示,使其适用于家庭而不是其他方法,此新代码将所有查询重定向到页面控制器到home.ctp。

//default code statement:
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
//New code
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'home'));

情况二:如果你想保留CakePHP的默认'display'功能

然后,当访问者访问test.ctp页面时,您必须在显示功能中构建一些重定向逻辑,@​​ Chuck Burgess也会通过链接回答。