阻止访问cakePHP中的页面

时间:2013-03-13 11:49:19

标签: acl cakephp-2.2

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

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

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

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

我该怎么做?

2 个答案:

答案 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); 它允许所有人在' \'网页.. 要么 如果你不允许除了显示页面,你什么都不做。