2012-04-30 9 views
2

私はhttp://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two.htmlチュートリアルを次ていると私は若干異なるグループビットを得た(グループ4および5)4は、訪問者で、5は、管理者CakePHPのACLのチュートリアルinitdbの機能の警告

function initDB() { 
10   $group = $this->User->Group; 
11   //Allow admins to everything 
12   $group->id = 5;  
13   $this->Acl->allow($group, 'controllers'); 
14  //^doesnt work 
15  //$this->Acl->allow(array('model' => 'Group', 'foreign_key' => 5), 'controllers'); 
16   
17   
18   $group->id = 4; 
19   $this->Acl->deny($group, 'controllers'); 
20   $this->Acl->allow($group, 'controllers/User/login'); 
21   $this->Acl->allow($group, 'controllers/User/logout'); 
22  /* 
23  $this->Acl->deny(array('model' => 'Group', 'foreign_key' => 4), 'controllers'); 
24  $this->Acl->allow(array('model' => 'Group', 'foreign_key' => 4), 'controllers/User/login'); 
25  $this->Acl->allow(array('model' => 'Group', 'foreign_key' => 4), 'controllers/User/logout'); 
26 */  
27   
28   
29   echo "all done"; 
30   exit(); 
31  } 

ですが、私はこの関数を実行したときに私が得ます次のエラー

Warning (512): DbAcl::allow() - Invalid node [CORE/Cake/Controller/Component/AclComponent.php, line 387] 
Warning (512): DbAcl::allow() - Invalid node [CORE/Cake/Controller/Component/AclComponent.php, line 387]all done 

何がありますか?

編集 - 私のアプリのコントローラは、この

<?php 

class AppController extends Controller { 
    public $components = array(
      'Acl', 
      'Auth' => array(
       'authorize' => array(
        'Actions' => array('actionPath' => 'controllers') 
        ) 
       ), 
      'Session' 
      ); 
    public $helpers = array('Html', 'Form', 'Session'); 

    public function beforeFilter() { 
     $this->Auth->actionPath = 'controllers/'; 
     //Configure AuthComponent 
     $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
     $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login'); 
     $this->Auth->loginRedirect = array('controller' => 'images', 'action' => 'index'); 
     $this->Auth->allow('display'); 
    } 
} 


?> 

EDIT 2のようになります。あなたは私が他のコードを投稿したい場合は、私に教えてください。この

Warning (512): DbAcl::allow() - Invalid node [CORE/Cake/Controller/Component/AclComponent.php, line 387] 
Code Context 
DbAcl::allow() - CORE/Cake/Controller/Component/AclComponent.php, line 387 
AclComponent::allow() - CORE/Cake/Controller/Component/AclComponent.php, line 128 
UsersController::initDB() - APP/Controller/UsersController.php, line 20 
ReflectionMethod::invokeArgs() - [internal], line ?? 
Controller::invokeAction() - CORE/Cake/Controller/Controller.php, line 473 
Dispatcher::_invoke() - CORE/Cake/Routing/Dispatcher.php, line 107 
Dispatcher::dispatch() - CORE/Cake/Routing/Dispatcher.php, line 89 
[main] - APP/webroot/index.php, line 96 

のように見えます 完全警告。

+0

あなたは 'AclExtras'プラグインをインストールし、' ./Console/cake AclExtras.AclExtrasのaco_sync'コマンドを実行しますか? – Saanch

+0

はい私はそれをしました! – CodeCrack

+0

私は実際のコードにコードを更新しました。 – CodeCrack

答えて

4
警告によると

、実際にあなたが3回$this->Acl->allow()$this->Acl->deny()一度だけ2警告を得るように見えることを呼んでいる、私は警告を与える行は、次のしていることを前提としています

$this->Acl->allow($group, 'controllers/User/login'); 
$this->Acl->allow($group, 'controllers/User/logout'); 

私はAclExtrasを使ってacosテーブルを既存のアクションと同期させるのではなく、AclComponentが複数のacosテーブルのコントローラエイリアスを要求する権限をチェックするときにAFAIKを使用します。だから、あなたのacosテーブルには、別名Userのレコードは含まれていませんが、別名Usersのレコードが含まれていると仮定します。

これは、'controllers/User/login'または'controllers/User/logout'で識別できるノードがacosテーブルにない理由を説明します。

私の仮定が正しければ、次のコードは動作します:

$this->Acl->allow($group, 'controllers/Users/login'); 
$this->Acl->allow($group, 'controllers/Users/logout'); 
+0

あなたは正しかった!ユーザーの代わりにユーザーを使用するのはなぜですか? – CodeCrack

+0

これらのパスはコントローラ内のアクションにつながります。 Cakeでは、コントローラの名前は複数形のモデル名(モデル 'User'の' UsersController')から作られています。私はそれがここで同じ論理に従うと思う。途中で私の答えを受け入れてくれてありがとう:-) – nIcO