2014-03-04 68 views
1

我無法使用ACL。在我的CoreUsersController中,我進行以下調用:Cakephp 2.1重命名沒有ACL的ACL表格

if(!$this->Acl->check('User::'.$user['User']['id'], 'CoreUser', 'read')) { 
    die('PERM DENIED'); 
} 

ACL作爲組件包含在我的AppController中。與數據庫表的樣子:

  • 表 「ACOS」
  • 表 「core_groups」(如阿羅斯)
  • 表 「aros_acos」 作爲core_groups和ACOS之間的連接。

這裏是引發的錯誤: 錯誤:模型阿羅表阿羅斯在數據源默認沒有被發現。


我的代碼:

1.用戶型號:

App::uses('AuthComponent', 'Controller/Component'); 

    class CoreUser extends AppModel { 

      public $useDbConfig = 'default'; 
      public $useTable = 'core_users'; 

      public $hasAndBelongsToMany = array(
       'MemberOf' => array(
        'className' => 'CoreGroup', 
        'joinTable' => 'core_users_groups', 
        'foreignKey' => 'user_id', 
        'associationForeignKey' => 'group_id' 
       ) 
      ); 

      public $name = 'User'; 
      public $actsAs = array('Acl' => array('type' => 'both')); 

      public function parentNode() { 
       // stuff in here should be correct 
      } 

}

2組,型號:

App::uses('AppModel', 'Model'); 
App::uses('AuthComponent', 'Controller/Component'); 

class CoreGroup extends AppModel { 

     public $useDbConfig = 'default'; 
     public $useTable = 'core_groups'; 

     public $hasAndBelongsToMany = array(
      'Member' => array(
       'className' => 'CoreUser', 
       'joinTable' => 'core_users_groups', 
       'foreignKey' => 'group_id', 
       'associationForeignKey' => 'user_id' 
      ) 
     ); 
     public $name = 'Group'; 
     public $actsAs = array('Acl' => array('type' => 'requester')); 

     public function parentNode() { 
      return null; 
     } 
} 

我的問題:如何告訴ACL使用 「core_groups」 - 表,而不是 「阿羅斯」 - 表?注意:我將Cake-Book建議的「ActsAs」添加到兩個模型中!

+0

你是否在shell中使用這個命令:。/控制檯/蛋糕架構創建DbAcl來創建acl表,或者你手動做到這一點? – skywalker

回答

1

如果你想與蛋糕的ACL來進行,那麼最好是有三個獨立的表:

1. aros 
2. acos 
3. aros_acos 

這些可以使用AclShell產生:

./Console/cake schema create DbAcl 

使用一個你不建議將應用程序的模型作爲ARO或ACO,因爲ARO和ACO模型是作爲樹結構實現的。這些應該與您的應用程序中「作爲」ACO/ARO的模型分開。

當你連接在$actsAs屬性爲您的用戶/組模型的Acl行爲中,ACL行爲的回調一命嗚呼這些用在你的用戶/組模型定義創建ARO 參考到的parentNode()方法在用戶/組模型中創建的行。這些引用是分別存儲在ARO表中的,指向實際的用戶和組。因此,ARO表是必要的。

我會建議你在本書中通過the ACL tutorial,因爲你的實現將非常相似。只需要小心使用User和Group之間的HABTM關係,因爲這需要稍微調整一下。

+0

感謝您的回覆!我閱讀了很多ACL教程,但很難獲得它,因爲大多數教程都是純理論的,並且沒有(完整的,深嵌套的)示例應用程序。 –

+0

本教程在本書中確實在ARO組中嵌套了User ARO。你的情況唯一的區別是用戶和組之間的關係。無論如何,事實上,你應該使用一個單獨的阿羅斯表,原因是我的答案中提到的原因。你可以參考[核心ARO模型](http://api.cakephp.org/2.3/class-Aro.html),看看你的CoreGroup模型表將不能複製像樹一樣的功能,等等。嘗試並使用單獨的表格,並讓我們知道您是否有任何其他問題/錯誤。祝你好運。 – jimmymadon