如何阻止访问cakePHP中的任何页面。对于页面,我指的是位于Page文件夹中的实际视图。
当我删除此行时,它可以工作,但它也会阻止用户登录。它会创建一个直接循环:
$this->Auth->allow('display');
基本上,当用户想要查看任何页面并且他们未登录时,他们将被重定向到登录(app/users/login
)页面。登录后,他们将被定向到他们上次尝试访问的页面。
我该怎么做?
答案 0 :(得分:2)
您遇到的问题是pagesController显示的所有页面是相同的操作(display()
),只使用不同的参数(页面)显示)。因此,您无法阻止对显示操作的访问,因为这会阻止访问所有页面。
如果页数有限,那么实现此目的的最简单方法是ControllerAuthorize
。阅读此处的文档; Using 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;
}
}
只是一个例子,当然,修改以满足您的需求
答案 1 :(得分:0)
使用 $这 - > Auth->允许(' \''显示&#39); 它允许所有人在' \'网页.. 要么 如果你不允许除了显示页面,你什么都不做。