한줄광고 모듈을 사용중인데 광고 수정버튼의 링크의 srl 번호를 변경해 본인이 아니라도 수정이 가능하더군요.

 

그래서 광고 수정쪽에 자신이 글을 등록했고 그 등록한사람이 로그인한 본인이라면 수정이 되고 아니면 오류창이 뜨게하고싶은데

 

if 까진 적었는데 함수를 모릅니다.. ㅠㅠ;

 

 

  • profile

    글이 담겨있는 변수가 $oDocument라고 가정할 때, 수정 권한을 파악하려면

    if($oDocument->isGranted()) 이걸 가장 많이 씁니다. 글 작성자와 관리자만 통과됩니다.

     

    member_srl 값을 직접 비교하고 싶다면

    if($oDocument->get('member_srl') == Context::get('logged_info')->member_srl)

    이렇게 하시면 되는데, 관리자이거나 비회원인 경우를 또 예외처리해야 하는 불편이 있으므로

    위와 같이 isGranted() 함수를 사용하는 것이 더 편리합니다.

  • profile ?

    기진곰님 질문에 대한 답을 알려주셔서 감사합니다.

     

    죄송하지만, 제가 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 배열이 문제일까요.. 연산자가 틀린건가요.. ㅠ

  • ? profile
    $user_rps는 바로 윗줄에서 배열로 선언하고 있고, $user_select는 문자열인 것 같네요.
    배열과 문자열을 !== 연산자로 비교할 수 없습니다. in_array 함수를 사용해 보세요.
  • profile ?

    $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');

     

    배열을 안써도 결과가 똑같은걸 보니 포기를 하는게.. 하핫..

  • ? profile

    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,'오류입니다');

  • profile ?
    아.. 인 어레이가 저런용도군요..
    배열안에 값이 존재하는지..

    유저셀렉트와 유저알피에스의 값이..
    배열안에 존재하지않는 값이면 오류입니다가 뜨는 그런거맞죠..?
  • profile
    같은 제작자분이 만든 자료들이 문제가 좀 있는거 같네요.
    포인트에 숫자에 이모티콘을 이어붙여 넣고 넣고 시도하면 포인트가 없이도 게임이 가능하다는 보고도 있었던 것 같습니다.
  • profile ?
    엇 그렇게 되면 포인트가 없이 게임도 진행되고 포인트도 얻어지나요?
  • profile ?
    xecenter 에 말했더니 xe 공홈에서 모듈 위젯이 다 사라졌더군요..ㅠㅠ
  • ? profile

    네. 예전에 그런 이야기가 있었어요. 저희는 해봐도 잘 안되었던것 같기도 하고 저희는 지금 게임을 다 내렸거든요.
    한번 해보세요. 어떤 식인지는 몰라도 문제가 있는 건 확실했습니다.

     

    그리고 그때 저희는 숫자 이외에는 안들어가게 고쳤던거 같아요.

  • ? profile
    유지보수는 안한다고 하셧으니 사이트를 위협할 수 있는 문제점이 있어 내리셨을 것 같습니다.
  • profile ?
    앗 혹시 숫자이외에 안들어가는게 먼지아시나여
    정수만들어가게..
    소숫점도 적용되더라구요..ㅜ
  • ? profile
    혹시 게임이 진행이 되던가요???
  • profile ?

    정상적으로 진행됩니다..
  • ? profile
    오래된 일이라 저도 어떻게 했는지 기억이 잘 안나는데요.
    스킨에서는

    <script type="text/javascript">
    function digit_check(evt){
    var code = evt.which?evt.which:event.keyCode;
    if(code < 48 || code > 57){
    return false;
    }
    }
    </script>



    이 스크립트를 이용해 숫자만 들어가게 했습니다.

    php 에서 아래 코드가 원래 있던건지 제가 넣은건지 기억이 안납니다.


    if(!is_numeric($setpoint)) $this->setMessage('숫자를 입력해주세요.');
    if(!is_numeric($setpoint)) return $this->setRedirectUrl(getNotEncodedUrl('act','dispRockgameUserView')); //초기화면
  • profile ?
    앗 감사합니다!
    스크립트로도 되는군요..php로만 하려고하니 ㅎㅎ.
  • ? profile
    혹시 php에 저 코드가 있던가요? 있다면 제가 추가한게 아니고 원래 있는데 숫자 이외의 값이 먹히는 것일 겁니다.

    스크립트는 보시면 digit_check 를 적용해야 동작합니다.
  • profile ?
    아니요 없었습니다 ㅎㅎ
  • ? profile
    없다면 php만 넣고 해보세요. 제가 넣은거면 아마 잘 될것 같은데요. 스킨에서도 처리한건 아마 입력 자체를 못하게 하려 보조적으로 했던 것 같습니다.

    그런데 문제가 어디서 터질지 몰라 저는 복권,가위바위보 다 내려버렸네요.
  • profile ?
    복권은 딱히 건들게 없는데
    가위바위보랑 한줄광고 퀴즈들이 문제네요..
    하나씩 수정하고있습니다.. 흑흑..