2

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

基本上,当我这样做时

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

用户只应该有权访问视图方法,这就是发生的事情。

问题是,当用户登录时,他突然也可以访问“添加”方法(我目前在控制器中唯一的其他方法。当他注销时,他不再有权添加。

这是我的代码:

//应用控制器

<?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';
    }

}
4

2 回答 2

2

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

于 2013-04-01T18:04:36.870 回答
1

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

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

---将该代码放入控制器具有您希望允许无需登录即可访问的操作

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

function beforeFilter(){     
             parent::beforeFilter();    
    $this->Auth->allow('add','view');
}
于 2013-05-03T19:02:17.837 回答