2013-06-06 63 views
0

我有一個控制器在一個CakePHP應用程序中,我有一堆的行動。我使用ACL Component來管理哪些用戶可以執行我的控制器中的哪些操作。我有一個isAuthorized()行爲在我的控制器檢查,如果某個登錄的用戶被允許執行所請求的動作,看起來像這樣:cakephp isAuthorized被調用的每個動作調用

function isAuthorized() 
{ 
    switch($this->action) 
    { 
     case 'myAction': 
      $user_id = $this->Auth->user('id'); // the id of the connected user   

      if($user_id) 
      { 
       return $this->Acl->check(
        array('model' => 'MyModel', 'foreign_key' => $user_id), 
        'controllers/MyController/myAction' 
       ); 
      } 

      break; 
    } 
} 

正如你可以在上面看到,所有我做的是檢查允許連接的用戶通過使用Acl組件的方法check執行myAction。我用這種方法遇到的問題是這個檢查每調用一次myAction被調用。有沒有辦法告訴Cake只執行一次這個檢查(例如在第一次調用動作時)?通過每次檢查是否允許用戶執行控制器操作,從而減慢應用程序的執行速度。

任何幫助或建議表示讚賞

謝謝

+0

「通過檢查每一次是否允許用戶執行控制器操作,從而減慢應用程序的執行速度。」真?與整個請求相比,訪問檢查需要多少時間? – Danack

+0

由於某些控制器操作被調用了很多次,這就是爲什麼應用程序變得更慢,因爲每次我調用該操作時,Cake都必須執行檢查。這就是爲什麼我只想執行此檢查一次只有 – user765368

+0

是的,但多少?你如何衡量時間? – Danack

回答

2

從技術上講,HTTP是無狀態的每個請求不必來自同一用戶的任何其他請求的任何親和力。狀態充滿度是通過使用會話創建的。

您可以將ACL檢查結果存儲在會話變量中。但是,如果用戶訪問權限在登錄時發生更改,則需要一些方法來重置它。