2012-03-02 82 views
0

比方說,我在我的數據庫中有一個名爲users的表,我想檢查表中的所有用戶是否有權執行某個控制器操作。如果我做這樣的事情:cakephp循環內的ACL權限

foreach($users as $user) 
{ 
    // check if user has permission to execute action 
    $is_allowed = $this->Acl->check(
      array('model'=>'User', 'foreign_key'=>$the_user_id), 
       'controllers/MyController/action_to_be_executed'); 

    if(!$is_allowed) 
    { 
     // give permission to user 
     $this->Acl->allow(
      array('model'=>'User', 'foreign_key'=>$the_user_id), 
       'controllers/MyController/action_to_be_executed'); 
    } 
} 

顯然,如果我有像上述情況,更多的用戶我在我的表,速度較慢的代碼會。有沒有人有任何想法如何我可以優化這使它運行合理快速,即使我的表包含超過5000用戶?有什麼建議麼?

在此先感謝

回答

1

首先想到的是使用

$this->Auth->allow('action_to_be_executed'); 

MyController控制器代碼,但實際上這可能不是你想要做什麼,因爲這會授予訪問權限的任何人,甚至未登錄的訪客。

如果你的目標是授權訪問任何身份驗證的用戶,這可能不是一個最佳解決方案添加特定的權限每個user <-> action_to_be_executed對。

相反,您可以將用戶鏈接到角色(如果尚未完成),並將對action_to_be_executed操作的訪問權授予每個角色。因此它將大大限制aros_acos表中的許可記錄數量,而且你根本不需要執行你的代碼,這將是一個不算太糟糕的優化;-)