2013-03-13 2 views
1

cakePHP의 모든 페이지에 대한 액세스를 차단하려면 어떻게해야합니까? 페이지에서는 페이지 폴더에있는 실제보기를 참조합니다.cakePHP의 페이지 액세스 차단

내가이 줄을 제거, 그것은 작동하지만, 그것은 또한 로그인 사용자가 중지되면이 직접 루프를 만들 것입니다 :. 기본적으로

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

, 사용자가 어떤 페이지를 볼 싶어하고 로그인하지 않으면 로그인 페이지 (app/users/login)로 리디렉션됩니다. 사용자가 로그인하면 마지막으로 액세스를 시도한 페이지로 이동합니다.

어떻게하면됩니까?

+0

에 맞게 수정,'디스플레이 페이지 동안 거절 당해야한다. – noslone

답변

2

상황에서 문제는 pagesController으로 표시 모든 페이지는 (표시 페이지) 다른 매개 변수를 사용하여 같은 행동 (display()) 때문이다. 따라서 표시 작업에 대한 액세스를 차단할 수 없습니다. 페이지에 대한 액세스를 차단할 수 있기 때문입니다.

페이지 수가 제한되면이를 구현하는 가장 쉬운 방법은 ControllerAuthorize입니다. 여기에있는 문서를 읽으십시오. Using ControllerAuthorize

class AppController extends Controller { 
    public $components = array(
     'Auth' => array('authorize' => 'Controller'), 
    ); 
    public function isAuthorized($user = null) { 
     // Make all actions public 
     return true; 
    } 
} 

그런 다음 페이지 컨트롤러 내부.

class PagesController extends AppController { 

    public function isAuthorized($user = null) { 
     if ('display' !== $this->request->action) { 
      // other actions; let he AppController handle access 
      return parent::isAuthorized($user); 
     } 

     if (!empty($user)) { 
      // Logged-in users have access to any page 
      return true; 
     } 

     $page = empty($this->request->params['pass'][0]) ? null : $this->request->params['pass'][0]; 

     switch($page) { 
      case 'home': 
      case 'about': 
      // etc 
       return true; 
     } 

     // all other pages are 'private' 
     return false; 
    } 
} 

그냥 예, 물론, 당신은 로그인 페이지`$ this-> Auth-> 수 있습니다 ('로그인')를 허용해야합니다 귀하의 요구

+0

2 주 전에 해결했지만 내 솔루션을 게시 할 시간이 없었습니다. 당신의 생각은 사실이지만 제가 사용한 정확한 해결책입니다. – Albert

+0

다행스럽게도 이미 고쳐 졌다고 들었을 때 올바른 해결책 인 '확인 된'해결책을 찾을 수 있습니다. – thaJeztah

+0

나는 그것이 올바른 접근 방법이라고 기쁩니다. 나는 항상 깨끗한 cakePHP와 함께 제공되는 코드를 수정하는 것이 위험하고 '더러운'것이라고 생각했다. 그러나 때로는 필요하다는 것을 깨달았습니다. – Albert

0

사용 $ this-> Auth-> allow ('\', 'display'); 아무 표시 페이지도 허락하지 않으면 '\'페이지 뒤의 모든 페이지를 허용합니다. 또는 .