2012-12-21 3 views
1

인증 된 사용자에게만 특정 컨트롤러를 허용하는 간단한 라우팅 규칙을 만들려고합니다.코드 컨트롤러의 후크 프리 컨트롤러에 요청 된 컨트롤러를 얻으십시오.

이렇게하려면 precontroller 후크를 실행하고 사용자가 ci 세션을 사용하여 로그인했는지 확인하고 싶습니다. 그러나 사용자가 액세스하려는 컨트롤러를 알고 있어야합니다. 후크 기능에서 이것을 어떻게 알 수 있습니까? 난 당신이

다음 시도 할 수 있습니다 여기에 달성하고자하는 것을 위해 후크가 가장 좋은 방법이라고 생각하지 말아

+0

사용 ACL 라이브러리 ->주고 역할 유형을>의 역할 유형을 확인 모든 컨트롤러 -> 특정 역할 –

답변

4

$ this-> router-> fetch_class();

확장 CI_Controller이 작동합니다.

3

는 : 당신은 당신이 인증 검사를하고 리디렉션 대신 CI_Controller의 확장됩니다 중앙 컨트롤러를 작성해야 바로 컨트롤러

에 사용자가 단계별로 jondavidjohn 단계에 의해 만들어진이 튜토리얼을 읽어

http://jondavidjohn.com/blog/2011/01/scalable-login-system-for-codeigniter-ion_auth 당신은 수오

10 분 후에 아이디어를 얻을 수있다

+0

왜 그것이 나쁜 관행으로 간주됩니다 허용? 상황에 따라 컨트롤러에 서로 다른 인증 수준을 가진 여러 가지 방법이있는 경우 라우터 수준에서 제어하면 더 깨끗한 코드가 생성됩니다. – jjj

0

그냥 컨트롤러 생성자에 인증을 넣으시겠습니까? 항목이 인스턴스화되고 거기에서 검사 할 수있을 때 호출됩니다. 또한 CI_Controller를 확장하여 거기에 논리를 넣을 수 있으므로 사용자가 거기에서 체크인 할 수 있습니다 (제안 된대로 this-> router-> fetch_class()를 사용하십시오).

+0

코드가 매우 반복적으로 나타납니다 (DRY). Ci_controller를 확장하는 추가 클래스를 확장하는 것이 훨씬 낫습니다. – jjj

+0

Yeap, 당신은 CI_Controller를 확장하고 그 생성자에 체크를 추가하는 새로운 클래스 Secure_controller를 만들 수 있습니다. 그런 다음 검사 할 모든 컨트롤러를 해당 컨트롤러로 확장하십시오. – tix3

+0

(두 번째 답변이 아니라 편집 된 답변에 대한 회신) 예. 내가 생각했던 것입니다. 컨트롤러에는 컨트롤러 및 메서드와 인증 수준의 관계가 포함 된 배열이 있어야합니다. 전체 인증 프로세스를 관리하는 단일 장소에서 매우 깨끗한 코드를 생성합니다. 물론, 사이트가 거대하게되지 않는 한 – jjj

0

확장 컨트롤러 경로를 사용하지 않으려는 경우 여기에 논리를 볼 수 있습니다. 그러면 CI 개체가 pre_controller_hook에 없기 때문에 네이티브 PHP를 사용해야합니다.

그래서, 컨트롤러를 찾을 수를 분석 한 후, URI를 얻을 :

$uri = $_SERVER['REQUEST_URI']; 
$segments = explode("/", $uri); 

// if you're removing index.php from your urls, then 
$controller = $segments[0]; 

// if you're not removing index.php 
$controller = $segments[1]; 
0

은 자동로드 라이브러리 클래스에 CI_Controller을 확장합니다. 이 같은

뭔가 : 사용자 -에 대한

class MyAuthLibrary extends CI_Controller { 
    var $ci; 

    function __construct() { 

     $this->ci = &get_instance(); 
     $route = $this->ci->router->fetch_class(); 

     if(($route !== 'login') && !$this->ci->session->userdata('email_address')) { 
      redirect('login'); 
     } 
    } 

} 
관련 문제