如何阻止对 cakePHP 中任何页面的访问。对于页面,我指的是位于页面文件夹中的实际视图。
当我删除这一行时,它可以工作,但它也会阻止用户登录。它会创建一个直接循环:
$this->Auth->allow('display');
基本上,当用户想要查看任何页面并且他们没有登录时,他们将被重定向到登录(app/users/login
)页面。登录后,他们将被定向到他们最后一次尝试访问的页面。
我该怎么办?
如何阻止对 cakePHP 中任何页面的访问。对于页面,我指的是位于页面文件夹中的实际视图。
当我删除这一行时,它可以工作,但它也会阻止用户登录。它会创建一个直接循环:
$this->Auth->allow('display');
基本上,当用户想要查看任何页面并且他们没有登录时,他们将被重定向到登录(app/users/login
)页面。登录后,他们将被定向到他们最后一次尝试访问的页面。
我该怎么办?
您的情况的问题是pagesController 显示的所有页面都是相同的操作(display()
),只是使用不同的参数(要显示的页面)。因此,您不能阻止对显示操作的访问,因为这将阻止对所有页面的访问。
如果页面数量有限,那么实现这一点的最简单方法是ControllerAuthorize
. 在此处阅读文档;使用控制器授权
class AppController extends Controller {
public $components = array(
'Auth' => array('authorize' => 'Controller'),
);
public function isAuthorized($user = null) {
// Make all actions public
return true;
}
}
然后,在您的页面控制器内部;
class PagesController extends AppController {
public function isAuthorized($user = null) {
if ('display' !== $this->request->action) {
// other actions; let he AppController handle access
return parent::isAuthorized($user);
}
if (!empty($user)) {
// Logged-in users have access to any page
return true;
}
$page = empty($this->request->params['pass'][0]) ? null : $this->request->params['pass'][0];
switch($page) {
case 'home':
case 'about':
// etc
return true;
}
// all other pages are 'private'
return false;
}
}
只是一个例子,当然,修改以满足您的需求
使用 $this->Auth->allow('\','display'); 它允许'\'页面之后的所有内容..或者如果你不允许除了显示页面你什么都不做。