2012-03-02 2 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'); 
    } 
} 

, 내 테이블에 내가 가지고있는 더 많은 사용자가 느린이 코드가 될 것입니다. 누구든지 내 테이블에 5,000 명 이상의 사용자가 포함되어 있어도 합리적으로 빠르게 실행할 수 있도록이 방법을 최적화 할 수있는 아이디어가 있습니까? 어떤 제안? 도에 사전에

덕분에

답변

1

먼저 생각 MyController 컨트롤러 코드에

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

을 사용했지만,이 사람에 대한 액세스 권한을 부여 때문에 실제로는, 당신이 원하는 무엇을 아마 아니다 방문자가 로그인하지 않았습니다.

인증 된 사용자에게 액세스 권한을 부여하는 것이 목표 인 경우 각 user <-> action_to_be_executed 쌍에 특정 권한을 추가하는 최적의 솔루션이 아닐 수 있습니다.

대신 역할에 사용자를 연결하고 (아직 완료하지 않은 경우) 각 역할에 대해 action_to_be_executed 작업에 대한 액세스 권한을 부여 할 수 있습니다. 따라서 aros_acos 테이블에있는 사용 권한 레코드의 수를 대폭 제한 할 수 있으며 코드를 전혀 실행할 필요가 없습니다. 너무 좋지는 않습니다 .-