한줄광고 모듈을 사용중인데 광고 수정버튼의 링크의 srl 번호를 변경해 본인이 아니라도 수정이 가능하더군요.
그래서 광고 수정쪽에 자신이 글을 등록했고 그 등록한사람이 로그인한 본인이라면 수정이 되고 아니면 오류창이 뜨게하고싶은데
if 까진 적었는데 함수를 모릅니다.. ㅠㅠ;
한줄광고 모듈을 사용중인데 광고 수정버튼의 링크의 srl 번호를 변경해 본인이 아니라도 수정이 가능하더군요.
그래서 광고 수정쪽에 자신이 글을 등록했고 그 등록한사람이 로그인한 본인이라면 수정이 되고 아니면 오류창이 뜨게하고싶은데
if 까진 적었는데 함수를 모릅니다.. ㅠㅠ;
기진곰님 질문에 대한 답을 알려주셔서 감사합니다.
죄송하지만, 제가 php를 잘몰라 하나만 더 질문하고싶습니다.
가위바위보 게임 모듈인데, 이게 가위바위보 부분에 개발자모드로
<input class="rps_img" type="image" id="rps_rock" src="/modules/rockgame/skins/pokebattle/img/rock.gif" onclick="this.form.rsp_slect.value='rock'">
여기에 value 값을 수정해버리면 이상하게 진행되는 현상이 있습니다.
//유저선택 $user_select = $args->rsp_slect; //컴터선택 $rps = rand(1,3); if($rps == 1){$com_select = 'rock';} if($rps == 2){$com_select = 'scissors';} if($rps == 3){$com_select = 'paper';} //게임결과 if($user_select == 'rock' && $com_select == 'rock') {$result = 'draw';} if($user_select == 'rock' && $com_select == 'paper') {$result = 'lose';} if($user_select == 'rock' && $com_select == 'scissors') {$result = 'win';} if($user_select == 'paper' && $com_select == 'paper') {$result = 'draw';} if($user_select == 'paper' && $com_select == 'scissors'){$result = 'lose';} if($user_select == 'paper' && $com_select == 'rock') {$result = 'win';} if($user_select == 'scissors' && $com_select == 'scissors') {$result = 'draw';} if($user_select == 'scissors' && $com_select == 'rock') {$result = 'lose';} if($user_select == 'scissors' && $com_select == 'paper') {$result = 'win';} //입력값설정 (db입력용) $logged_info = Context::get('logged_info'); $args->member_srl = $logged_info->member_srl; $args->nick_name = $logged_info->nick_name; $args->regdate = date('Y-m-d H:i:s'); $args->com_select = $com_select; $args->user_select = $user_select; $args->result = $result; $args->set_point = $args->game_point; if($result == 'win') $args->game_point = +$args->game_point; if($result == 'lose') $args->game_point = -$args->game_point; if($result == 'draw') $args->game_point = 0; //잘못된 값을 입력하면 리턴 $user_rps = array('rock', 'paper', 'scissors'); if($user_rps !== $user_select) return new Object(-1,'오류입니다');
그래서 컨트롤러 부분에 잘못된값을 입력하면 리턴을 시키게 저렇게 입력해놨는데
왜인지 모르지만 정상적으로 작동해야하는 부분까지 오류라고 떠버립니다..
php 배열이 문제일까요.. 연산자가 틀린건가요.. ㅠ
$user_rps = in_array('rock', 'paper', 'scissors');
if($user_rps !== $user_select) return new Object(-1,'오류입니다');
로 적어보아도 동일하네여..
php 모른 상태로 모듈을 수정하기는 너무 험난하네여...
-- 추가
if($user_select !== 'rock' && $com_select) return new Object(-1,'Error');
if($user_select !== 'paper' && $com_select) return new Object(-1,'Error');
if($user_select !== 'scissors' && $com_select) return new Object(-1,'Error');
배열을 안써도 결과가 똑같은걸 보니 포기를 하는게.. 하핫..
http://php.net/manual/kr/function.in-array.php
$user_rps = array('rock', 'paper', 'scissors');
if(!in_array($user_select, $user_rps)) return new Object(-1,'오류입니다');
네. 예전에 그런 이야기가 있었어요. 저희는 해봐도 잘 안되었던것 같기도 하고 저희는 지금 게임을 다 내렸거든요.
한번 해보세요. 어떤 식인지는 몰라도 문제가 있는 건 확실했습니다.
그리고 그때 저희는 숫자 이외에는 안들어가게 고쳤던거 같아요.
글이 담겨있는 변수가 $oDocument라고 가정할 때, 수정 권한을 파악하려면
if($oDocument->isGranted()) 이걸 가장 많이 씁니다. 글 작성자와 관리자만 통과됩니다.
member_srl 값을 직접 비교하고 싶다면
if($oDocument->get('member_srl') == Context::get('logged_info')->member_srl)
이렇게 하시면 되는데, 관리자이거나 비회원인 경우를 또 예외처리해야 하는 불편이 있으므로
위와 같이 isGranted() 함수를 사용하는 것이 더 편리합니다.