통합게시판을 이용하다보면 다른 모듈에서 컨트롤 하는 부분이 작동하지 않는 경우가 있습니다.
예를 들면 사이트운영관리 모듈에서 각 게시판(모듈) 별로 활동내역에 따라 권한을 부여하는 경우 통합게시판에서 글 열람할 경우에는 이게 먹히지 않습니다.
- 원 게시판의 제한 설정이 되어 있다면 해당 글은 제한이 됩니다. 하지만 통합게시판 전체를 컨트롤 할 수는 없습니다.
이게 무슨 이야기인가 하면 타임라인모듈 또는 라이믹스 통합게시판 기능으로 통합게시판을 운영할때 여러 게시판을 모아놓은 통합게시판의 게시글 열람 권한을 사이트활동모듈을 이용해서 설정 기간동안 글 N개, 댓글 N개, 레벨 을 만족해야 글 열람이 가능하도록 하고 싶어도 할 수 가 없습니다.
왜냐면 사이트운영관리 모듈에서 해당 글이 읽혀질때 해당 문서의 원래 모듈(게시판)이 사이트운영관리 모듈에 활동제한 설정이 있는지 확인을 하고 그에 따라 제한을 하기 때문입니다.
- 라이믹스 2.0 통합게시판 에서는 문서 열람시 이 코드의 도움 없이도 사이트운영관리 모듈의 통합게시판의 설정에 따라 연동이 되고 있음을 확인했습니다. 문서정보가 가지는 모듈정보는 분명히 원게시판의 모듈정보를 가리키고 있으나 다른 변화가 있는 듯 합니다.
뭐 원글이 제한이 잘되니 문제는 없는 것 처럼 이해될 수 있지만 지금 원하는 것은 그게 아니고 통합게시판 전체를 특정 활동내역의 기준으로 글 열람을 하지 못하도록 하려고 하는 것입니다.
그런데 이렇게 되려면 사이트운영관리 모듈의 설정에서 통합게시판의 게시글 열람 제한 조건을 입력하고 이 입력에 따라서 통합게시판의 모든 게시글이 이 조건에 따르도록 해주어야 합니다.
사이트운영관리 모듈에서 제한하는 코드를 통합게시판의 게시글 열람 권한을 확인하는 애드온 등에 이식해 주어서 똑같이 통합게시판의 전체글을 활동내역에 따라 열람을 허용할 수 있게 할 수 있습니다.
제가 배포한 통합게시판에서 원게시글의 게시판의 글 열람 권한에 따라 통합게시판의 글 열람도 똑같이 권한을 부여할 수 있도록 해주는 애드온에 지금 팁으로 작성하는 코드를 넣으면 제일 좋습니다.
https://rxtip.kr/download/17680
그리고 최근 배포한 통합게시판을 이용한 블로그 기능 제공 애드온에도 똑같은 기능이 제공되고 있으니 이 애드온을 이용하시는 분들도 애드온에 코드를 넣으시면 됩니다.
https://rxtip.kr/download/17680
애드온의 코드를 열어보시면 원 게시글의 게시판 열람권한을 확인후 열람권한을 부여받지 못한 방문자에게는 권한이 없다는 메시지를 보여주고 게시글 열람을 차단하는 코드가 있습니다.
여기에 한가지 더 사이트운영관리 모듈의 설정을 게시글의 원게시글 모듈이 아닌 지금 현재 통합게시판의 설정을 확인한 후 그에 맞게 제한하거나 혹은 허용하는 것을 추가해 주는 것 입니다.
코드를 추가하지 않으면 사이트운영관리 모듈에서 통합게시판의 게시글을 열람하려면 작성 글 N개 가 필요하다고 설정을 하여도 사이트운영관리 모듈에서 통합게시판 글을 열람할때 이 게시글이 통합게시판에 포함된 글인지 모르기 때문에 원게시글의 게시판의 설정만 참조하고 통과가 되어 버립니다.
$module_config = $oModuleModel->getModuleConfig('sitemanagement');
$timeline_module_info = $oModuleModel->getModuleInfoByMid(Context::get('mid'));
$timeline_module_srl = $timeline_module_info->module_srl;
$module_part_config = $oModuleModel->getModulePartConfig('sitemanagement',$timeline_module_srl);
if(($logged_info->is_admin == 'Y') && $module_config->limit_access_admin_pass == 'yes') return;
//회원레벨 구함 (설정값 존재시)
if($module_part_config['limit_access_module']['level'] || $module_part_config['limit_access_document']['level']){
if($logged_info){
$oPointModel = &getModel('point');
$point_config = $oModuleModel->getModuleConfig('point');
$member_point = $oPointModel->getPoint($logged_info->member_srl);
$member_level = $oPointModel->getLevel($member_point, $point_config->level_step);
}
}
//작성한 게시물 수 가져옴 (설정값 존재시)
if($module_part_config['limit_access_module']['doc'] || $module_part_config['limit_access_document']['doc']){
if($logged_info){
$args = new stdClass();
$args->regdate_more = $module_part_config['limit_date'] ? date('Ymd',strtotime(sprintf('-%s days', $module_part_config['limit_date']))) : '';
$args->member_srl = abs($logged_info->member_srl);
$member_doc_count = executeQuery('sitemanagement.getDocumentCountByMemberSrl', $args)->data->count;
}else{
$member_doc_count = 0;
}
}
//작성한 덧글 수 가져옴 (설정값 존재시)
if($module_part_config['limit_access_module']['com'] || $module_part_config['limit_access_document']['com']){
if($logged_info){
$args = new stdClass();
$args->regdate_more = $module_part_config['limit_date'] ? date('Ymd',strtotime(sprintf('-%s days', $module_part_config['limit_date']))) : '';
$args->member_srl = abs($logged_info->member_srl);
$member_com_count = executeQuery('sitemanagement.getCommentCountByMemberSrl', $args)->data->count;
}else{
$member_com_count = 0;
}
}
//레벨확인
if($module_part_config['limit_access_document']['level'] && $module_part_config['limit_access_document']['level'] > $member_level){
$message = "레벨 부족으로 인해 접근이 제한되었습니다.\n".$module_part_config['limit_access_document']['level'].' 레벨 이후 접근이 가능합니다.';
if(!Context::get('logged_info')) $message = '로그인이 필요합니다';
header("Content-Type: text/html; charset=UTF-8");
alertScript($message);
echo '<script type="text/javascript">history.back()</script>';
Context::close();
exit;
}
//게시글수 확인
if($module_part_config['limit_access_document']['doc'] && $module_part_config['limit_access_document']['doc'] > $member_doc_count){
$msg_date = $module_part_config['limit_date'] ? $module_part_config['limit_date'].'일간 ' : '';
$message = "활동 부족으로 인해 접근이 제한되었습니다.\n".$msg_date.'게시글 '.$module_part_config['limit_access_document']['doc'].'개 댓글 '.$module_part_config['limit_access_document']['com']."개 이상 작성 후 접근이 가능합니다.\n현재 작성한 게시글 ".number_format($member_doc_count).'개 댓글 '.number_format($member_com_count).'개 입니다.';
if(!Context::get('logged_info')) $message = '로그인이 필요합니다';
header("Content-Type: text/html; charset=UTF-8");
alertScript($message);
echo '<script type="text/javascript">history.back()</script>';
Context::close();
exit;
}
//댓글수 확인
if($module_part_config['limit_access_document']['com'] && $module_part_config['limit_access_document']['com'] > $member_com_count){
$msg_date = $module_part_config['limit_date'] ? $module_part_config['limit_date'].'일간 ' : '';
$message = "활동 부족으로 인해 접근이 제한되었습니다.\n".$msg_date.'댓글 '.$module_part_config['limit_access_document']['com']."개 이상 작성 후 접근이 가능합니다.\n현재 작성한 댓글 ".number_format($member_com_count).'개 입니다.';
if(!Context::get('logged_info')) $message = '로그인이 필요합니다';
header("Content-Type: text/html; charset=UTF-8");
alertScript($message);
echo '<script type="text/javascript">history.back()</script>';
Context::close();
exit;
}
추가하는 곳으로 표시해 드린 곳에 이 코드 전체를 넣어주어서 사이트운영관리 모듈에서 체크하지 못한 것을 모듈의 정보를 통합게시판의 모듈정보로 한번더 설정확인 과 그에 따른 제한을 하게 하는 것 입니다.
이렇게 해주면 사이트운영관리 모듈에서 원하는 통합게시판에 원하는 게시글 열람 기준 설정을 해주면 통합게시판의 글 열람시 활동기준에 맞지 않는 방문자는 통합게시판의 모든 글을 열람하지 못하게 됩니다.
이번 팁에서 가장 중요하게 볼 부분은 사실 굵게 표시해 드린 부분입니다. 기존에 사이트운영관리 모듈에서 현재 글이 어떤 모듈의 글인지 확인할 경우 문서의 모듈정보를 따라가기 때문에 원게시글의 원래 게시판 모듈의 소속글로 확인되는 것이 맞습니다.
하지만 이렇게 될 경우 타임라인의 소속된 모든 게시판의 사이트운영관리 모듈에서 제한이 동일하게 되어있거나 해야 활동내역으로 제한이 가능해지는 불가능한 상황입니다.
그래서 이렇게 통합게시판의 게시글을 열람하는 순간 권한을 체크하는 코드가 있는 곳에 통합게시판의 전체설정을 따르도록 하는 코드를 구현해 두면 쉽게 가능해집니다.
** 라이믹스 2.0 주의사항 **
테스트를 위해서 라이믹스 꿀팁에 통합게시판을 임시로 만들어 테스트를 해 보았는데 이 코드 추가 없이 라이믹스 2.0의 통합게시판에서 문서 열람시 사이트운영관리 모듈에서 통합게시판 설정의 제한에 따라 문서열람의 제한이 되고 있습니다.
따라서 라이믹스 2.0 사이트에서는 이 기능 자체가 필요없을 수 있습니다.
라이믹스 2.0 + 타임라인 모듈의 통합게시판에서도 동일한 결과가 나오는지는 확인이 필요할 수 있겠습니다.
이 코드를 추가한 시연용으로 보여드리려고 했는데 코드 없이 사이트운영관리 모듈의 설정에 따라 제한이 되는 것을 보여드리게 되었네요.
https://rxtip.kr/test_merge