2012-05-30 2 views
5

사용자 테이블 (user_level_id)에 연결된 사용자 (user_levels)를 분할하는 테이블이 있습니다. 레벨 5는 관리자입니다.cakePHP isAuthorized not working

특정 동작을보고 제한하고 싶습니다. isAuthorized를 사용하여이를 수행 할 수 있습니다. 나는 책에 따라 갔고 나는 그것이 옳다고 확신하지만 그것은 효과가 없다. isAuthorized에서 거부하더라도 로그인 된 모든 사용자가 여전히 모든 작업에 액세스 할 수 있습니다. 그냥 isAuthorized()를 사용하는 단지 AuthComponent 말할 구성을 놓치고처럼

App Controller:public $components = array(
    'Session', 

    'Auth' => array(
     'loginAction' => array(
      'controller' => 'users', 
      'action' => 'login', 
     ), 
     'authError' => "Your username and password is incorrect, please try again.", 
     'authenticate' => array(
      'Form' => array(
       'scope' => array('User.user_status_id' => 1) 
      ) 
     ), 
     'redirect' => array("controller" => "users", "action" => "profile"), 
     'loginRedirect' => array("controller" => "users", "action" => "profile") 
    ) 
); 

public function isAuthorized($user = null) { 
    if($this->Auth->user("user_level_id") == 5) { 
     return true; 
    } 
    // Default deny 
    return false; 
} 

public function beforeFilter() { 
    $this->Auth->allow("display"); 
    if($this->Auth->loggedIn() == true) { 
     $this->set("user_name",$this->Auth->user("first_name")." ".$this->Auth->user("last_name")); 
     $this->set("loggedIn",true); 
     if($this->Auth->user("user_type_id") == 5) { 
      $this->set("navigation","navigation_admin"); 
     } else { 
      $this->set("navigation","navigation_loggedin"); 
     } 
    } else { 
     $this->set("loggedIn",false); 
     $this->set("navigation","navigation_notloggedin"); 
    } 

} 

} 

// Users Controller: 

public function beforeFilter() { 
    $this->Auth->allow("login"); 
    parent::beforeFilter(); 
} 

public function isAuthorized($user = null) { 
    if($this->Auth->user("user_level_id") == 5) { 

     return true; 
    } 
    // Default deny 
    return parent::isAuthorized($user); 
} 
+0

어떤 책을 팔로우 하시겠습니까? – Bahdeng

답변

6

가 보이는 :

여기 내 코드입니다.

'Auth' => array(
     'loginAction' => array(
      'controller' => 'users', 
      'action' => 'login', 
     ), 
     'authError' => "Your username and password is incorrect, please try again.", 
     'authenticate' => array(
      'Form' => array(
       'scope' => array('User.user_status_id' => 1) 
      ) 
     ), 
     'authorize' => array('Controller'), // <- here 
     'redirect' => array("controller" => "users", "action" => "profile"), 
     'loginRedirect' => array("controller" => "users", "action" => "profile") 
    ) 
+0

안녕하세요, 제레미, 답장을 보내 주셔서 감사합니다. 단 하나의 질문입니다. 특정 사용자의 행동을 차단하는 방법을 아직 이해하지 못했습니다. 예를 들어 내 사용자 컨트롤러에는 여러 가지 작업이 있으며 표준 사용자는 프로필 및 등록에 액세스 할 수 있지만 추가, 수정 및 삭제와 같은 작업은 차단하려고합니다. isAuthorized() 내에서 어떻게합니까? 나는 그것이 허용되지 않는 사용을 허용하고 거부한다는 것은 사용자가 로그인하지 않은 사용자에게만 적용된다는 것을 알고 있습니다. – mauzilla

+0

일반적으로 ACL을 사용하여 이와 비슷한 작업을 수행합니다. 그러나 각 컨트롤러에서 커스텀'isAuthorized()'를 사용하여 이것을 수행 할 수 있고 사용자 그룹별로 허용 된 액션의 배열을 저장 한 다음이를 체크 할 수 있습니다. 어느 쪽이든, 그것은 새로운 토론을위한 주제로 충분합니다. – jeremyharris

+0

@jeremyharris 한 주제 외 질문. 왜 "redirect"와 "loginRedirect"옵션이 존재하고 같은 URL을 지적하고 있습니까? – ozanmuyes