【发布时间】:2011-04-29 19:44:00
【问题描述】:
我了解如何允许未登录用户执行某些控制器操作。但是,我找不到任何关于如何允许访问特定页面的文档。控制器是页面,动作是显示。但是,我不想让用户看到所有页面,只是关于页面。
那么,允许访客访问部分而非全部页面的正确方法是什么?
【问题讨论】:
我了解如何允许未登录用户执行某些控制器操作。但是,我找不到任何关于如何允许访问特定页面的文档。控制器是页面,动作是显示。但是,我不想让用户看到所有页面,只是关于页面。
那么,允许访客访问部分而非全部页面的正确方法是什么?
【问题讨论】:
恐怕您无法使用AuthComponent 提供的标准功能来做到这一点。您必须在 pages_controller 的 display 操作中为此创建自己的逻辑。
类似(伪代码风格)
# in app/controllers/pages_controller.php
var $allowedPages = array('one', 'two');
function display($page) {
if(in_array($page, $allowedPages) || $this->User->loggedin) {
$this->render($page);
} else {
$this->render('not_allowed');
}
}
【讨论】:
在 CakePHP 3.x 中,您可以通过在 PagesController beforeFilter 操作中指定完整操作来实现您的目标:
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
$this->Auth->allow(
['controller' => 'pages', 'action' => 'display', 'about']
);
}
【讨论】: