웹마스터 팁
통합검색 기능에 권한 적용하기 (완전 차단 필요할 때)
2012.04.30 11:56
간단한 팁인데, 이걸 몰라서 꽤 복잡한 방식으로 고치느라 고생하시는 분들이 계신 것 같아서 적어봅니다.
통합검색을 사이트 전체 대상으로 하는 만큼, 노출 자체를 허용하기 싫은 상황이 발생할 수 있습니다. 예를 들어, 사이트의 컨텐츠를 승급된 정회원만 이용하게 하고 싶은 경우가 그것입니다.
검색 입력 폼을 권한에 따라 노출 여부를 정하는 방식은 사실상 눈가리고 아웅 하는 격이고, 따라서 IS 모듈의 동작 자체를 제어할 필요가 있습니다.
1.5.x 버전 기준으로 통합검색이 실행되는 uri 는 보통 다음과 같습니다.
/?error_return_url={검색 발생한 페이지 url}&mid={검색 발생한 페이지 mid}&act=IS&search_target=title_content&is_keyword={검색어}
위 링크에서 mid가 하는 역할에 주목해야 합니다. 해당 mid 를 갖는 모듈의 권한에 따라서 IS의 동작 권한도 발생하기 때문입니다(intergration_search.view.php 파일의 funciton IS() 를 참조하세요).
즉, 검색 기능 자체를 차단하고 싶다면, 권한 설정이 된 mid 를 연결시켜주면 간단히 해결되는 셈입니다. 이해가 잘 안 되시면 다음의 설정 과정을 보시면 감이 잡히실 것 같습니다.
1.
제 경우에는 이렇게 외부페이지 속성으로 IS 라는 mid 를 갖는 모듈을 생성했습니다.
생성 후 권한 관리 페이지에서 원하는 설정을 해줬습니다.
2.
그리고 다음과 같이 통합검색 폼 부분을 수정합니다.
<form action="{getUrl()}" method="get" class="iSearch">
<input type="hidden" name="vid" value="{$vid}" cond="$vid" />
<input type="hidden" name="mid" value="IS" />
<input type="hidden" name="act" value="IS" />
<input type="hidden" name="search_target" value="title_content" />
<input name="is_keyword" type="text" class="iText" title="keyword" />
</form>
3.
권한설정 내용을 적용하려고 mid 를 건드리는 것인 만큼, 통합검색에서 mid 를 체크하게끔 해서 우회 접근을 아예 막아버립니다.
/modules/intergration_search/intergration_search.view.php 파일에서 아래의 mid check 내용을 추가합니다.
function IS() {
$oFile = &getClass('file');
$oModuleModel = &getModel('module');
// Check permissions
if(!$this->grant->access) return new Object(-1,'msg_not_permitted');
// mid check
$mid = Context::get('mid');
if(empty($mid)||$mid!='IS') { return new Object(-1,'msg_not_permitted'); }
지금까지 내용은 단순히 권한에 따른 통합검색 접근 허용/비허용 내용입니다만, if(!$this->grant->{권한명칭} 구문을 응용하고, db의 xe_module_grants 테이블에 IS 모듈에 대한 설정을 추가해서 제목만 노출시키거나 내용을 제어하는 등 여러 가지 조치를 취할 수 있을 겁니다.
별다른 내용은 없습니다만, 참고가 되셨으면 해서 쓰고 갑니다.^^
댓글 9
-
YO-DA
2012.04.30 17:59
-
딸꾹질
2013.02.17 21:46
지금도 적용되네요. 감사드립니다.
-
스케이트보드
2013.08.29 07:08
우연히 다른 거 검색하다 알게 되었는데 소름돋네요...ㄷㄷㄷ
빨리 통합검색을 수정해야 하는데 수정해야 할 경로를 모르겠어요...
모듈>보드>스킨 폴더에 들어왔고 디폴드를 사용중이라 혹시나 싶어서 _read.html 파일을 열어봤는데 못찾겠네요...
어디서 수정해야 하나요...?
-
스케이트보드
2013.08.31 08:00
1,3번을 그대로 따라했는데 2번은 어디서 수정하는지 모르겠어요..ㅠㅠ
modules/integration_search/skins/default
여기인가 해서 봤는데 없더라고요..
통합검색 모듈에 스킨은 어디일까요...?
-
스케이트보드
2013.08.31 08:12
layouts/xe_official 여기서 찾았네요^^
-
스케이트보드
2013.08.31 08:14
문제는 이렇게 했는데 검색이 되네요...
화면만 다를뿐..ㅠㅠ
권한을 줘야 하는 것 같은데 등급이 여러개 인데 어떻게 해야할지 모르겠어요..ㅠㅠ
-
박경서726
2014.07.22 12:05
구글에 검색해도 통합검색 관련해서 유일한 글이기에 위의 내용을 토대로 수십번 참고하면서도 했는데
저 역시 스케이드보드님과 동일한 증상나옵니다..ㅠㅠ
모듈에 들어가서 해당페이지를 선택된 대상을 검색에서 제외 했음에도 불구하고 권한없는 사람이 단어를 검색해도 뜹니다.
알려주실분 안계신가요?
-
garnecia
2014.07.25 18:35
http://www.xpressengine.com/index.php?mid=tip&search_target=title&search_keyword=%ED%86%B5%ED%95%A9%EA%B2%80%EC%83%89&document_srl=22597547
제가 쓴 글이지만.. 이방법으로 됩니다.
-
꾸링
2015.08.22 03:04
IS 페이지에 ./is.php 에 값이 없으니 하얀색 백지로 뜰 수 밖에 없는 구조인데
제대로 동작하는 것이맞나요..?
고맙습니다^^ 요긴하게 사용할게요~