2012-07-10 101 views
0

我有一個應用程序,所有用戶都必須登錄。我使用Auth組件進行身份驗證,並使用ACL進行授權。cakePHP ACL未登錄時

我基本上做這樣的事情在beforeFilter管理員()的`控制器:

if(!$this->Acl->check(array('model' => 'User', 'foreign_key' => $this->Auth->user()['id']), 'Admin', 'read')) 
{ 
    pr('You are NOT allowed to be here!'); 
} 

這非常適用於任何登錄的用戶,一些用戶可以看到管理頁面,有些不能。

然而,當我去/管理時尚未登錄,我得到:

AclNode ::節點() - Couldn '找不到由 "陣列([Aro0標識阿羅節點。模型] = >模型[Aro0.foreign_key] = > U) "

(我不知道爲什麼它打印的 'U')。這就像它試圖做查找,但由於用戶信息不在那裏,它崩潰了。我確定我在這裏錯過了一些東西。我可以通過檢查避免了問題,如果用戶登錄:

if($this->Auth->user()) //do the ACL check 

但我不喜歡這樣的做法,我想這是錯誤的。

我需要某種默認設置嗎?

回答

0

該錯誤意味着在您的數據庫中沒有acos中的節點。 此外foreign_key的關係是錯誤的!也許你應該檢查Cake Book - Simple Acl controlled Application,之後我會給你更多關於你不明白的細節。

在beforeFilter()中,你應該只有Guest允許,其餘的特權都在DB中。

+0

謝謝你的回答。我是ACL的新手,而且文檔很雜亂。我不明白爲什麼我沒有在acos中使用它,因爲它是在我登錄用戶時工作的。另外,爲什麼foreign_key錯誤?它指向登錄的用戶。 – joakimdahlstrom 2012-07-10 22:02:55