모듈 제작하면서 따로 메모해 둘 필요가 있을것 같아 이곳에 기록을 남김니다.


정해진 그룹만 특정 권한을 부여하는 방법입니다.


먼저, 모듈 정보에 입력항목을 추가하고 싶을때...

conf 폴더내 module.conf 파일에서 admin_index 또는 setup_index 의 액션 명을 찾아 액션 명령어 함수가 있는 파일을 불러오기 합니다.


예를 들어, 액션명이 dispTestAdminInsertTest 이라고 할때 이 액션은 관리자용 액션이라서 test.admin.view.php 라는 파일에 액션 함수가 있습니다.

dispTestAdminInsertTest 액션이 관리자 전용인지 어떻게 알수 있냐고요? 액션명에 Admin 이 있으면 관리자 페이지에서 사용되는 액션 함수라는 의미입니다.


test.admin.view.php 라는 파일내에서 dispTestAdminInsertTest 라는 함수명을 검색합니다.


보통 함수 마지막 부분에 다음과 같은 구문이 있습니다.

$this->setTemplateFile('insert_test');


dispTestAdminInsertTest 라는 액션을 실행하면 'insert_test.html' 라는 파일의 내용이 출력됩니다.

그리고 'insert_test.html' 파일의 저장 경로는 dispTestAdminInsertTest 가 관리자 전용 액션함수라서 모듈 폴더내의 tpl 폴더내에 있습니다.


'' 파일 내용을 보면 보통 html 입력 폼 구문이 있습니다. 즉, 해당 모듈의 환경 설정에 대한 입력 항목들입니다.


여기서 예를들어 그룹을 선택할 수 있는 항목을 추가해 보겠습니다.


<div class="x_control-group">
<label class="x_control-label">그룹</label>
<div class="x_controls">
<label for="grant_to_all" class="x_inline"><input type="radio" name="send_grant_all" id="grant_to_all" value="Y" checked="checked"|cond="$module_info->send_grant_all== 'Y'" /> 모든 사용자</label>
<label for="grant_to_login_user" class="x_inline"><input type="radio" name="send_grant_all" id="grant_to_login_user" value="N" checked="checked"|cond="$module_info->send_grant_all== 'N'" /> 로그인 사용자</label>
<label for="grant_to_group" class="x_inline"><input type="radio" name="send_grant_all" id="grant_to_group" value="S" checked="checked"|cond="$module_info->send_grant_all== 'S'" /> 선택한 그룹 사용자</label>
</div>
</div>

<div class="x_control-group" id="group_select" style="margin-top:8px;display:none;">
<label class="x_control-label">그룹명</label>
<div class="x_controls">
<label loop="$group_list => $group_srl, $group_item" for="user_group" class="x_inline">
{@ $user_group = 'user_group'.$group_srl;}
<input type="checkbox" name="{$user_group}" value="{$group_item->title}"<!--@if($module_info->{$user_group} == $group_item->title)--> checked="checked"<!--@end--> id="{$user_group}" />
{$group_item->title}
</label>
</div>
</div>

아래 코드를 html 파일에 추가합니다.

'선택한 그룹 사용자' 라디오 버튼을 선택하면 그룹 선택창이 출력이 되고, 만약 '모든 사용자' 또는 '로그인 사용자' 등의 다른 라디오 버튼을 선택하면 그룹 선택한 값을 초기화되는 jQuery 구문입니다.


<script>

    jQuery( function() {

var grantGroup = jQuery('input:radio[name="send_grant_all"]:checked').val();

if(grantGroup =='S') jQuery("#group_select").css("display","block");

jQuery('input:radio[name="send_grant_all"]').change( function(event) {

if(jQuery(this).val() == "S") jQuery("#group_select").css("display","block");

else

{

jQuery("[id^=user_group]").removeAttr('checked');

jQuery("#group_select").css("display","none");

}

} );

} );

</script>


스킨 파일드의 모듈 항목이 출력되는 파일의 권한 조정이 필요한 부분에 아래 코드를 추가하면 됩니다.

예를 들어 폼 전송 버튼을 특정 그룹 사용자에게만 출력되도록 하려면...

<!--@if($is_logged&&$module_info->send_grant_all=='S')-->

<!--@foreach($group_list as $key => $group_info)-->

{@ $user_group = 'user_group'.$group_info->group_srl;}

<!--@if(in_array($module_info->{$user_group},$logged_info->group_list))-->

{@ $module_info->send_grant_all='Y';}

<!--@end-->

<!--@end-->

<!--@end-->


<!--@if($module_info->send_grant_all=='Y')-->

<input type="submit" value=" 전송 / SEND ">

<!--@end-->


만약 $group_list 변수에 아무런 값이 출력되지 않는다면

액션 함수 내에 아래 구문을 추가하면 그룹 정보 변수인 group_list 가 페이지로 전달됩니다.

// Get a list of groups

$oMemberModel = getModel('member');

$group_list = $oMemberModel->getGroups($module_info->site_srl);

Context::set('group_list', $group_list);