코드이그나이터 기반 PHP 오픈소스 게시판 : 씨아이보드

비밀글 열람 권한 지정 옵션

  • 꽃이피는첫걸음
  • 0
  • 2,856
  • 글주소
  • 10-15

비밀글의 경우 글쓴이와 관리자만 열람이 가능합니다.

중간 관리자나 직원이 확인해야 하는 경우 다음과 같이 비밀글 열람 권한을 지정하여 사용하도록 합니다.


1. /views/admin/basic/board/boards/write_access.php :: 91라인 아래에 추가


<div class="form-group">

<label class="col-sm-2 control-label">비밀글열람</label>

<div class="col-sm-8 form-inline">

<?php

$config = array(

'column_name' => 'access_secure_view',

'column_level_name' => 'access_secure_view_level',

'column_group_name' => 'access_secure_view_group',

'column_value' => element('access_secure_view', element('data', $view)),

'column_level_value' => element('access_secure_view_level', element('data', $view)),

'column_group_value' => element('access_secure_view_group', element('data', $view)),

'max_level' => element('config_max_level', element('data', $view)),

'mgroup' => element('mgroup', element('data', $view)),

);

echo get_access_selectbox($config);

?>

</div>

<div class="col-sm-2">

<label for="grp_access_secure_view" class="checkbox-inline">

<input type="checkbox" name="grp[access_secure_view]" id="grp_access_secure_view" value="1" /> 그룹적용

</label>

<label for="all_access_view" class="checkbox-inline">

<input type="checkbox" name="all[access_secure_view]" id="all_access_secure_view" value="1" /> 전체적용

</label>

</div>

</div>



2. /application/controllers/admin/board/Boards.php :: write_access() 에 추가

/**
 * 전송된 데이터의 유효성을 체크합니다
 */
$config = array(
--- 중간생략 ---
array(
'field' => 'access_secure_view',
'label' => '권한 - 비밀글 열람',
'rules' => 'trim|numeric',
),
array(
'field' => 'access_secure_view_level',
'label' => '권한 - 비밀글 열람 레벨',
'rules' => 'trim|numeric',
),
array(
'field' => 'access_secure_view_group[]',
'label' => '권한 - 비밀글 열람 그룹',
'rules' => 'trim',
),

--- 중간생략 ---

/**
 * 유효성 검사를 통과한 경우입니다.
 * 즉 데이터의 insert 나 update 의 process 처리가 필요한 상황입니다
 */

// 이벤트가 존재하면 실행합니다
$view['view']['event']['formruntrue'] = Events::trigger('formruntrue', $eventname);

$array = array('access_list', 'access_list_level', 'access_view', 'access_view_level', 'access_secure_view', 'access_secure_view_level',
'access_write', 'access_write_level', 'access_reply', 'access_reply_level', 'access_comment',
'access_comment_level', 'access_upload', 'access_upload_level', 'access_download',
'access_download_level', 'access_dhtml', 'access_dhtml_level', 'access_blame',
'access_blame_level', 'access_poll_write', 'access_poll_write_level', 'access_poll_attend',
'access_poll_attend_level', 'access_tag_write', 'access_tag_write_level',
'access_subject_style', 'access_subject_style_level', 'access_list_selfcert',
'access_view_selfcert', 'access_write_selfcert', 'access_comment_selfcert');

$array_checkbox = array('access_list_group', 'access_view_group', 'access_secure_view_group', 'access_write_group',
'access_reply_group', 'access_comment_group', 'access_upload_group',
'access_download_group', 'access_dhtml_group', 'access_blame_group',
'access_poll_write_group', 'access_poll_attend_group', 'access_subject_style_group',
'access_tag_write_group');

--- 중간생략 ---

if ($value === 'access_view') {
$groupdata['access_view_level'] = $this->input->post('access_view_level', null, '');
$groupdata['access_view_group'] = json_encode($this->input->post('access_view_group', null, ''));
}
if ($value === 'access_secure_view') {
$groupdata['access_secure_view_level'] = $this->input->post('access_secure_view_level', null, '');
$groupdata['access_secure_view_group'] = json_encode($this->input->post('access_secure_view_group', null, ''));
}

--- 중간생략 ---

if ($value === 'access_list') {
$alldata['access_list_level'] = $this->input->post('access_list_level', null, '');
$alldata['access_list_group'] = json_encode($this->input->post('access_list_group', null, ''));
}
if ($value === 'access_view') {
$alldata['access_view_level'] = $this->input->post('access_view_level', null, '');
$alldata['access_view_group'] = json_encode($this->input->post('access_view_group', null, ''));
}

3. /application/controllers/Board_post.php :: post() 수정

if ($print && ! element('use_print', $board)) {
alert('이 게시판은 프린트 기능을 지원하지 않습니다');
return false;
}

$is_secure_view = false;
/* 비밀글 처리 : 게시판 설정에서 비밀글 열람 권한 설정 추가 */
if (element('post_secret', $post)) {
      if(element('access_secure_view', $board))
      $is_secure_view = $this->accesslevel->is_accessable(element('access_secure_view', $board), element('access_secure_view_level', $board), element('access_secure_view_group', $board), $check);

if (element('mem_id', $post)) {
if ($is_admin === false && $mem_id !== abs(element('mem_id', $post)) && !$is_secure_view) {
alert('비밀글은 본인과 관리자만 확인 가능합니다');
return false;
}
} else {
if ($is_admin !== false || $is_secure_view) {
$this->session->set_userdata(
'view_secret_' . element('post_id', $post),
'1'
);
}