Cakephp 2.3 $ this-> Auth-> allow()无法按预期工作

时间:2013-04-01 17:41:41

标签: cakephp authentication cakephp-2.3

我正在尝试在CakePHP 2.3中使用AuthComponent,但它的行为并不像我期望的那样。

基本上,我做的时候

$这 - > Auth->允许( '观看');

用户只能访问view方法,这就是发生的事情。

问题是,当用户登录时,他突然也可以访问“添加”方法(此时我在控制器中唯一的其他方法。当他退出时,他无权添加再来一次。

这是我的代码:

// AppController的

<?php
App::uses('Controller', 'Controller');

class AppController extends Controller {

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Blowfish' => array(
                'fields' => array('username' => 'email', 'password' => 'password')
            )
        )
    )

);

public function beforeFilter() {      
  $this->Auth->deny('add');
  $this->Auth->allow('view');
}

}

我的PagesController就是这样:

<?php
App::uses('AppController', 'Controller');

class PagesController extends AppController {

public $uses = array('Pages');

public function view($id = null) {
       echo 'In view';
    }

public function add($id = null) {
       echo 'In add';
    }

}

2 个答案:

答案 0 :(得分:2)

你误解了allow()/ deny()的作用。它们用于指定是否可以使用或不使用身份验证(也称为登录)访问操作。这并不意味着在用户登录后控制授权即控制对操作的访问。为此,您需要配置授权。阅读this应该有助于您更好地理解。

答案 1 :(得分:1)

如果你在cakephp 2.x上工作,你必须这样做:

function beforeFilter(){       
    $this->Auth->allow(array('action you want to allow1','action you want to allow2'));
}
  • allow(array())而不是allow()

---将该代码放入控制器中,您希望无需登录即可访问

如果你使用$ this-&gt; Auth-&gt; allow()你必须调用parent :: beforeFilter();在函数beforeFilter()中这样:

function beforeFilter(){     
             parent::beforeFilter();    
    $this->Auth->allow('add','view');
}