2009-04-20 7 views
4

isAuthorized() 메서드를 사용하여 관리 플래그를 확인하려고하지만 함수가 호출 된 적이없는 것 같습니다. false를 항상 반환하도록 함수를 설정하더라도 모든 사용자가 허용합니다. 그것은 부름을받지 않은 것처럼 보입니다.cakephp isAuthorized()가 호출되지 않음

$ this-> Auth-> authorize = 'controller'를 설정하는 것 이상을해야합니까?

에서

class AppController extends Controller 
{ 

var $components = array('Auth'); 

function beforeFilter() 
{ 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
    $this->Auth->loginRedirect = array('controller' => 'pages', 'display' => 'home'); 
    $this->Auth->logoutRedirect = '/'; 
    $this->Auth->authorize = 'controller'; 
    $this->Auth->userScope = array('User.active' => 1); 
} 

function isAuthorized() 
{ 
    if (strpos($this->action, "admin_") != false) 
    { 
     if ($this->Auth->user('isAdmin') == '0') 
     { 
      return false; 
     } 
    } 
    return true; 
} 
} 

답변

12

다른 컨트롤러에서 인증 설정을 재정의하는지 확인해야합니다.

먼저 isAuthorized()이 호출되는지 확인하려면 간단한 debug($this); die;을 입력 해보십시오.

죽어 가고 있지 않다면 다른 컨트롤러 (parent::isAuthorized() 호출이 누락되었습니다)에서이를 무시한 것일 수 있습니다.

그렇지 않다면 beforeFilter()을 사용하면됩니다. 이 문제가 발생하는 경우 박사 한니발 렉터의 대답에 추가

+1

나는 beforeFilter()를 재정의하고 parent :: beforeFilter()를 호출하지 않았다. –

-4

/app/app_controller.php 당신은 '인증'은 해당 컨트롤러의 구성 요소를 배열에 있는지 확인해야합니다

$this->components[] = 'Auth'; 

드롭이 생성자과 물론 작동하지 않아야합니다. 행운을 빕니다!

+0

나는 원래의 게시물에서 생략하지만, 그것을 추가 내 편집은 항상 거기에 있었다. –

1

는 또 다른 가능한 이유가 (내가 그랬던 것처럼 ...) :

컨트롤러가tests_controller라는 이름의 경우,의 시작 방법 Auth-Component는 인증을 시작하지 않고 중단합니다 (적어도 cakePHP 1.3.10에서는 2.x를 확인하지 않았습니다). 그래서 당신은 컨트롤러의 이름을 결코 확신 할 tests_controller ... 케이크 \ libs와에서

발췌 \ 컨트롤러 \ 구성 요소 \ auth.php

function startup(&$controller) { 
    $isErrorOrTests = (
     strtolower($controller->name) == 'cakeerror' || 
     (strtolower($controller->name) == 'tests' && Configure::read() > 0) 
    ); 
    if ($isErrorOrTests) { 
     return true; 
    } 
... 
관련 문제