feat: 관리자 회원 수정에 본인확인 정보 삭제 기능 추가
CI·DI 관련 식별값, 본인확인·성인인증 상태, 생년월일·성별과 인증 이력을 별도 요청으로 정리한다. 일반 회원정보와 이메일 인증 상태는 유지하고 삭제할 정보가 없는 경우 버튼을 숨긴다. 회원 수정·삭제 권한과 대상 회원 등급, POST·관리자 토큰·요청 출처를 검증한다. 검증: 변경 PHP 3개 문법 검사, 임시 DB의 권한·토큰·출처·대상 정보 삭제 및 다른 회원 보존 검사 통과. 브라우저에서 별도 폼 제출과 관리자 토큰 삽입 확인.
This commit is contained in:
@@ -478,6 +478,30 @@ function check_log_folder($log_path, $is_delete = true)
|
||||
}
|
||||
}
|
||||
|
||||
// 회원 본인확인 식별값과 인증 이력만 정리한다. 호출부에서 관리자 권한을 검증한다.
|
||||
function admin_clear_member_certification($mb_id)
|
||||
{
|
||||
global $g5;
|
||||
|
||||
$esc_mb_id = sql_real_escape_string($mb_id);
|
||||
$history_table = isset($g5['member_cert_history_table']) ? $g5['member_cert_history_table'] : G5_TABLE_PREFIX.'member_cert_history';
|
||||
|
||||
// 일반 회원정보(이름·연락처)와 이메일 인증 상태는 유지한다.
|
||||
if (!sql_query(" update {$g5['member_table']}
|
||||
set mb_certify = '', mb_adult = 0, mb_dupinfo = '', mb_birth = '', mb_sex = ''
|
||||
where mb_id = '{$esc_mb_id}' ", false)) {
|
||||
return false;
|
||||
}
|
||||
if (!sql_query(" delete from {$history_table} where mb_id = '{$esc_mb_id}' ", false)) {
|
||||
return false;
|
||||
}
|
||||
if (!sql_query(" delete from {$g5['cert_history_table']} where mb_id = '{$esc_mb_id}' ", false)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// POST로 넘어온 토큰과 세션에 저장된 토큰 비교
|
||||
function check_admin_token()
|
||||
{
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
$sub_menu = '200100';
|
||||
require_once './_common.php';
|
||||
|
||||
check_demo();
|
||||
auth_check_menu($auth, $sub_menu, 'w');
|
||||
auth_check_menu($auth, $sub_menu, 'd');
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
alert('올바른 방법으로 이용해 주십시오.');
|
||||
}
|
||||
|
||||
check_admin_token();
|
||||
admin_referer_check();
|
||||
|
||||
$mb_id = isset($_POST['mb_id']) && is_string($_POST['mb_id']) ? trim($_POST['mb_id']) : '';
|
||||
$mb = get_member($mb_id);
|
||||
if (empty($mb['mb_id'])) {
|
||||
alert('존재하지 않는 회원자료입니다.');
|
||||
}
|
||||
|
||||
if ($is_admin !== 'super' && ($mb['mb_level'] >= $member['mb_level'] || is_admin($mb['mb_id']) === 'super')) {
|
||||
alert('자신보다 권한이 높거나 같은 회원의 본인확인 정보는 삭제할 수 없습니다.');
|
||||
}
|
||||
|
||||
if (!admin_clear_member_certification($mb['mb_id'])) {
|
||||
alert('본인확인 정보를 모두 삭제하지 못했습니다. DB 상태를 확인한 뒤 다시 시도해 주십시오.');
|
||||
}
|
||||
|
||||
alert('본인확인 정보와 인증 내역을 삭제했습니다.', './member_form.php?w=u&mb_id='.urlencode($mb['mb_id']));
|
||||
@@ -438,6 +438,20 @@ add_javascript(G5_POSTCODE_JS, 0); //다음 주소 js
|
||||
<?php if ($cnt == 0) { ?>
|
||||
본인인증 내역이 없습니다.
|
||||
<?php } ?>
|
||||
<?php
|
||||
$has_certification_data = $cnt > 0 || !empty($mb['mb_dupinfo']) || !empty($mb['mb_certify'])
|
||||
|| !empty($mb['mb_adult']) || !empty($mb['mb_birth']) || !empty($mb['mb_sex']);
|
||||
if ($w === 'u' && !$has_certification_data) {
|
||||
$cert_request = sql_fetch("select count(*) as cnt from {$g5['cert_history_table']} where mb_id = '".sql_real_escape_string($mb['mb_id'])."'");
|
||||
$has_certification_data = !empty($cert_request['cnt']);
|
||||
}
|
||||
$can_cleanup_certification = $w === 'u' && $has_certification_data
|
||||
&& ($is_admin === 'super' || (isset($auth[$sub_menu]) && strpos($auth[$sub_menu], 'd') !== false));
|
||||
?>
|
||||
<?php if ($can_cleanup_certification) { ?>
|
||||
<p>본인확인 ‘아니오’는 인증 상태만 변경합니다. 정보 삭제는 CI/DI 관련 식별값, 본인확인·성인인증 상태, 생년월일·성별 및 본인인증 내역을 삭제합니다. 회원 이름과 연락처는 유지합니다.</p>
|
||||
<button type="submit" form="fmembercertcleanup" class="btn btn_02">본인확인 정보 삭제</button>
|
||||
<?php } ?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -598,6 +612,13 @@ add_javascript(G5_POSTCODE_JS, 0); //다음 주소 js
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<?php if ($can_cleanup_certification) { ?>
|
||||
<form id="fmembercertcleanup" method="post" action="./member_cert_cleanup.php" onsubmit="return confirm('본인확인 정보와 인증 내역을 삭제하시겠습니까? 삭제 후 복구할 수 없으며, 회원정보의 다른 수정사항은 저장하지 않습니다.');">
|
||||
<input type="hidden" name="mb_id" value="<?php echo get_text($mb['mb_id']); ?>">
|
||||
<input type="hidden" name="token" value="">
|
||||
</form>
|
||||
<?php } ?>
|
||||
|
||||
<script>
|
||||
function fmember_submit(f) {
|
||||
if (!f.mb_icon.value.match(/\.(gif|jpe?g|png)$/i) && f.mb_icon.value) {
|
||||
|
||||
Reference in New Issue
Block a user