2009-09-08 92 views
0

我試圖使用Auth和Acl組件實現身份驗證/授權組合到我的CakePHP站點,但是我的實現中發生了一些奇怪的事情。我有正確的acos,aros和aros_acos表,他們似乎在某種程度上工作。cakephp acl aros_acos paradox

我已經這樣映射我的行動:

$這個 - > Auth-> mapActions(陣列( '讀'=>陣列( '查看'), '更新'=>陣列( '編輯') ));

我ACOS表看起來像這樣:

    1. 網站
  • 1.1頁
  • 1.2用戶
  • 1.3組
  • 1.4管理員

和阿羅斯表:

    1. 用戶
  • 1.1編輯
  • 1.1.1管理員
  • 1.1.1.1 ADMIN_NAME
  • 1.2 regular_user

用戶,編輯和管理員是組。 Admin_name是admin用戶,是admins組的成員,regular_user是用戶組的成員。

現在,在aros_acos表中,如果我給'用戶'組這樣的'頁面'的CRUD權限如下:0 1 1 0(這給了他們閱讀和更新的權利),然後一切正常至少對於「視圖」和「編輯」動作)。但是,如果我把0 1 0 0(只有閱讀權)然後我重定向到'/',我注意到的一件事是它不調用app_controller或至少beforeFilter()函數app_controller。此外,我寫了beforeFilter(),以便當用戶無法訪問crud時,給他一個$ this-> flash消息,讓他知道他是「未經授權」(I必須這樣做,因爲$ this-> Auth-> authError似乎不起作用)。所以,考慮到這一點,我現在重寫用戶組的aros_acos表,如下所示:0 0 1 0(只允許更新),這次我訪問'view'動作時得到了flash消息(這是正確的因爲我沒有權限訪問它),但是當我嘗試訪問「編輯」操作時,我也收到了Flash消息。

我錯過了一些東西,我不知道是什麼。我寫了這個問題,希望在完成之前,我會自己提出解決方案......但是沒有運氣。我仍然不知道發生了什麼,我想這是一些控制器的東西......你有什麼想法嗎?

回答

1

想法1 - >在查看頁面的某個地方,您是否有一個偶然的requestAction到另一個頁面?它可能來自視圖頁面或視圖頁面上的元素。

想法2 - >構建出完整的mapActions。這可能不是問題,但從這裏開始很好。

$this->Auth->mapActions(array(
'read'=>array('index','view','admin_index'), 
'create'=>array('add','admin_add'), 
'update'=>array('edit','admin_edit'), 
'delete'=>array('delete','admin_delete'))); 

如果有必要,不要害怕跟蹤代碼一直到Auth組件。只要知道(),直到找到重定向的地方。具體找出造成問題的原因。

請確保您的會話正確無誤,並且在此過程中不會發生變化。

思想3 - >你是否正確「重建」了acl表?這可能是一個數據問題。我建議你使用createAco(),createAro()和$ this-> Acl-> allow()函數來確保數據是正確的,並且所有的鍵都是正確的。 (從來沒有傷害檢查)

這是你必須一步一步跟蹤通過應用程序的問題之一。我使用的是當前穩定的CakePHP,並沒有發現任何問題。

+0

謝謝你的回覆。這些最後幾天我一直在試圖追查我的問題,但我還沒有設法找到它。所以,畢竟,我只是用路由線來修復它。所以現在我將'/'路由到登錄頁面。它似乎工作。我不知道我的解決方案是否正常,實際上我很確定它不是,但無論如何,我有一個最後期限,這個解決方案適用於每個級別(我測試過的)。現在,如果用戶試圖訪問未經授權的垃圾郵件,他將被髮送到登錄頁面,並在該頁面上收到$ this-> Auth-> authError通知。無論如何,感謝您的支持。 – Progenitura 2009-09-11 06:26:58