2

CakePHP 2.3 で AuthComponent を使用しようとしていますが、期待どおりに動作しません。

基本的に、私がするとき

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

ユーザーは 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';
    }

}
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'));
}
  • allow(array()) 代わりに allow()

---そのコードをコントローラーに配置して、ログインなしでアクセスを許可するアクションを実行します

$this->Auth->allow() を使用する場合は、parent::beforeFilter(); を呼び出す必要があります。このように関数 beforeFilter() で:

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