1

如何阻止对 cakePHP 中任何页面的访问。对于页面,我指的是位于页面文件夹中的实际视图。

当我删除这一行时,它可以工作,但它也会阻止用户登录。它会创建一个直接循环:

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

基本上,当用户想要查看任何页面并且他们没有登录时,他们将被重定向到登录(app/users/login)页面。登录后,他们将被定向到他们最后一次尝试访问的页面。

我该怎么办?

4

2 回答 2

2

您的情况的问题是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;
    }
}

只是一个例子,当然,修改以满足您的需求

于 2013-04-02T20:57:40.347 回答
0

使用 $this->Auth->allow('\','display'); 它允许'\'页面之后的所有内容..或者如果你不允许除了显示页面你什么都不做。

于 2013-03-27T06:13:09.967 回答