2011-04-16 80 views
1

我的客戶的網站我有一個管理部分 - 唯一的事情是我的管理路由似乎沒有密碼保護。我加了關於如何建立一個用戶系統的教程管理員保護,並已放在下面的代碼在app_controller.php:管理員驗證檢查不工作

function beforeFilter() { 
    // if an admin route is requested and not logged in 
    $user = $this->Session->read('User'); 
    if(isset($this->params['admin']) && $this->params['admin'] && is_null($user)) { 
     // set Flash and redirect to login page 
     $this->Session->setFlash('You need to be logged in for that action.','default',array('class'=>'flash_bad')); 
     $this->redirect(array('controller'=>'users','action'=>'login','admin'=>FALSE)); 
    } 
} 

&在我的應用程序/配置/ routes.php文件我有這樣的:

Router::connect('/login', array('controller' => 'users', 'action' => 'login')); 
Router::connect('/admin/logout', array('controller' => 'users', 'action' => 'logout')); 

我很確定是缺少一些保護。

雖然我仍然可以訪問其他管理區域,即theowlhouse.com.au/admin/bookings。

我在做什麼錯?用戶模型的管理頁面是唯一受保護的頁面。

謝謝:)

+0

你使用了什麼教程?你能發佈一個鏈接嗎? – Headshota 2011-04-16 07:40:19

+0

http://www.jamesfairhurst.co.uk/posts/view/creating_an_admin_section_with_cakephp_updated – 2011-04-21 18:27:04

回答

1

它看起來像你使用的auth component混淆prefix routing。請注意,前綴路由在版本1.3之前稱爲「管理路由」。

您不需要使用管理路由來使用auth組件。讓我們從設置auth組件開始。在您的應用程序控制器,請確保您有它列入你的組件陣列。

​​

一旦你做到了這一點,用戶將被引導到登錄頁面,除非他們被記錄到允許匿名用戶訪問一個動作,你調用$this->Auth->allow('action name');所以,例如,假設你想允許未經身份驗證的用戶在你的物品控制器中使用index()和view()動作,而不是add()或edit()。在你的items_controller.php中,你會設置beforeFilter()來撥打電話:

function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow(array(
     'index', 
     'view' 
    )); 
} 
+0

謝謝泰勒, 因此,我認爲我在過濾器之前就廢棄了另一個?我是否會將admin_前綴廢棄爲管理員功能? cakephp是否已經知道用戶模型將用於身份驗證? 此外,我看不出您的語法有什麼問題,但是當我更改beforeFilter時,出現意外的T運算符錯誤。 – 2011-04-17 01:21:00

+0

正確,你應該替換beforeFilter。正確的,你不需要使用'admin_'前綴。將Auth組件的默認值更正爲使用User模型。我上面編輯了我的代碼,因爲它缺少一個>和一個右括號。 – Tyler 2011-04-17 04:11:16

+0

謝謝你回到我身邊 - 首先我已經改變了我的app_controller beforeFilter()更新登錄身份驗證,但我很好奇,我怎麼會有一個控制器和admin_index索引...我可以無論如何只要放它? 我的問題只是讓登錄工作 - 有些東西只是不正確。實際上它非常有趣,但我會問別的地方。我想,一旦我得到了這個工作,你的幫助將使它無縫地走下去。感謝堆傢伙。 – 2011-04-21 18:40:59