【问题标题】:Cakephp 2.3 $this->Auth->allow() is not working as expectedCakephp 2.3 $this->Auth->allow() 没有按预期工作
【发布时间】:2013-04-01 17:41:40
【问题描述】:

我正在尝试在 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';
    }

}

【问题讨论】:

    标签: cakephp authentication cakephp-2.3


    【解决方案1】:

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

    【讨论】:

    • 谢谢先生。这就是我所担心的。我假设 isAuthorized 仅适用于拥有帐户的人?
    • Yes isAuthorized 用于授权,只有在用户登录后才能发挥作用。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-04-04
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      相关资源
      最近更新 更多