CI 묻고 답하기

제목 특정 controller에는 특정 IP만 접속하게 하고 싶어요.
글쓴이 정주Go 작성시각 2012/05/30 23:25:47
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 21252   RSS
특정 컨트롤러는 IP 제한을 두고 싶은데요. 조언 부탁드립니다.
http://도메인/admin/ 특정IP 외에 접근 불가
http://도메인/user/ 어느 IP나 접근 가능

추가 1) controller 이름을  private, class 등과 같은 예약어를 사용하고 싶은데 어떻게 해야 하는가요

읽어주셔서 감사합니다.
태그 IP제한
 다음글 [초보]라이브러리로 값 넘기기 (5)
 이전글 [질문]페이지 값 10의 자리수 중... (2)

댓글

헛발이 / 2012/05/31 09:03:29 / 추천 0
제 생각인데요...

$this->ci->input->ip_address()를 이용해서 아이피를 얻어 낸다음에
특정아이피와 비교해서 접근 불허가를 하는 함수를 하나 만드시는게 좋치 않을까 하는데요..

그리고는..

function __construct()
{
    parent::__construct();
    //여기에서 그 함수를 호출 하는것을 만들면....
}

배강민 / 2012/05/31 09:12:01 / 추천 0
 저 같은 경우는 나중에 막고싶은 컨트롤러나 메쏘드가 또 있을 수도 있고 여러군데 막고자 할수도 있어서

후킹으로 비스무레 처리했습니다.

 /**
  * 사이트 차단
  * @author KangMin (tapbbs.com)
  * @since 2011.11.17
  */
 public function site_block()
 {
  $CI =& get_instance();

  $allow = array('admin', 'block', 'user', 'index'); //2012.04.24 index 추가

  if( ! in_array($CI->uri->segment(1), $allow) )
  {
   if(SETTING_site_block_used == 1)
   {
    delete_session();
    redirect('/block/site', 'refresh');
   }
  }
 }

저기서 원래 $CI->router->fetch_class() 로 컨트롤러자체를 비교하려 했는데

세그먼트로 한 이유는 저같은 경우 admin 은 컨트롤러가 아니라 1차 폴더래서 fetch_class 로는 admin이라고 잡을 수가 없어서 세그먼트를 사용했습니다.

상황이 된다면(?) fectch_class 로 하는게 좋을듯 싶습니다..

위 함수는 단순 참고용이니까용..

저처럼 후킹으로 처리하려면 저기에 헛발이님이 말씀해주신 ip 잡는 걸 사용하고

hook 으로 위 함수를 부르면 됩니당..

뭐 전 이런식으로 했습니다..ㅋ

변종원(웅파) / 2012/05/31 10:15:09 / 추천 0
출근해서 답변 달라고 했는데 두분이 달아주셨네요.

헛발이님 방식은 개별로 생성자에서 체크하는 방식이고
KangMin님 방식은 후킹 파일에서 배열로 컨트롤러명을 체크하는 방식입니다.

정답은 없구요. 상황에 맞게 쓰시면 됩니다. 
제어할 것이 몇개 안되면 헛발이님 방식으로 함수 만들어서 쓰시면 됩니다.
변종원(웅파) / 2012/05/31 10:24:15 / 추천 0
예약어 부분은 그냥 안쓰시는 것이 좋습니다.
코어를 수정하실 수는 있으나 얼마나 어떻게 수정해야할지는 모릅니다. 

정 쓰시고 싶으시면 예약어뒤에 s 붙여서 쓰세요. ^^;
정주Go / 2012/05/31 10:47:33 / 추천 0
헛발이님, KangMin님 답변 감사합니다.
적절히 잘 사용하겠습니다.

웅파님 안넣으면 그만인 것을 넣고 싶어지네요.ㅎ
controller 폴더 안에 private, class 폴더를 만들면 가능하네요.

모두들 감사합니다.
최화영이 / 2012/06/13 10:59:08 / 추천 0
hook 단에서 처리하고
아이피 블록하고 컨트롤러를 config에 설정하면 
구현도 간단하고 추후에도 추가도 간단할거 같은데요.