2011-06-15 70 views
0

我正在使用數據庫ACL的修改版本製作CakePHP應用程序。CakePHP ACL:可選ACO節點(默認情況下爲允許)

爲了避免必須爲每個控制器創建ACO節點,我想建立一個系統,允許用戶訪問頁面,除非另有否認。這意味着我不想爲控制器創建ACO節點,除非絕對必要。

通常情況下,如果我失敗創建一個ACO節點,當我isAuthorised()函數執行$this->Acl->check,我得到一個錯誤,如本...

Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check. Node references: 
Aro: Array 
(
    [model] => Role 
    [foreign_key] => 1 
) 

我認爲,一個可行的解決辦法是檢查在執行$this->Acl->check命令之前存在ACO節點。如果它不存在,那麼可以阻止它檢查權限。

有沒有辦法根據$this->Auth->action()(輸出類似於controllers/Members/Edit)的輸出檢查ACO節點是否存在?

我的Auth ActionPath設置爲'controllers'。

或者也許有更好的方法去做呢?

我希望我已經充分說出了我的問題,我會保證澄清,如果沒有。

謝謝!

回答

0

通過編輯核心ACL.php文件解決了這個問題,沒有正常的解決方案。

0

如果你想使用ACL組件,你必須有ARO和ACO樹。否則,使用該組件是沒有意義的。

我建議你爲所有用戶創建一個超級用戶,允許他訪問所有的ACO節點,但是拒絕特定的ACO節點。所以,所有用戶都會繼承該抽象超級用戶的權限。我想你已經學習了Simple Acl controlled Application tutorial,不是嗎?

另一個選擇是使用Auth組件並編寫自己的權限處理組件。有許多教程如何構建管理面板。

3

您可以使用this來檢查Aco是否存在。

if($this->Acl->Aco->node('controllers/Members/Edit')) { 
    debug('Aco exists!'); 
} 
+0

此答案中的語法錯誤,未關閉')';請改正。 – Dariusz 2013-10-02 08:46:14

相關問題