2013-05-30 27 views
0

我正在使用cakephp 2.3.0並使用ACL。我給權限的組,如下所示:如何給節點參考檢查cakephp 2.3 ACL權限

$group->id = 2; 
$this->Acl->deny($group, 'controllers'); 
$this->Acl->allow($group, 'controllers/Posts'); 

現在,我怎麼能檢查「控制器/帖子」允許來自同一個控制器$組 - > ID = 2?

我想

$this->Acl->check('controllers/Posts', '2'); 

,但它始終返回false併產生報警:

Failed ARO/ACO node lookup in permissions check. Node references: 
Aro: controllers/Pages 
Aco: Data entry operator 

請幫助我。謝謝。

回答

2

語法

$this->Acl->check(array(
    'model' => 'ModelName',  # The name of the Model to check agains 
    'foreign_key' => $foreign_key # The foreign key the Model is bind to 
), 'Controller/action');   # The controller and action to check the permissions for 

在下面的調用導致:

作爲用戶

$this->Acl->check(array(
    'model' => 'User', 
    'foreign_key' => $userId 
), 'Posts/index'); 

作爲集團

$this->Acl->check(array(
    'model' => 'Group', 
    'foreign_key' => $groupId 
), 'Posts/index'); 

我寫下來,包括一些linebreaks的可讀性。

更多信息在:

+0

謝謝,現在它正在工作。 –

+0

還有一個問題,$ this-> Acl-> check()非常慢。花費太長時間來檢查所有資源。有沒有更快的方法? –

+0

您可以將Session中的每個唯一條目緩存在數組中。這樣你不必多次檢查。只需擴展AuthComponent並添加一個嘗試首先檢查會話數據的新方法。 *注意:當您更新ACL表並且用戶沒有銷燬它的會話時,我將不會被會話知道,只要記住這一點; - )*但是,不,除了以外沒有任何更快的方式緩存。很傷心。但通常ACL表不會經常發生變化。 – Jelmer

0

檢查節點許可是非常相似的設置,權限即

$group->id = 2; 
$this->Acl->check($group, 'controllers/Posts');