url

http://blog.bandoche.com/101

https://www.xpressengine.com/tip/17334915


제로보드 XE 에서는 권한이 없는 행동을 할 경우,


정말 말 그대로 '권한이 없습니다' 라는 메시지를 띄웁니다.


물론 논리적인 문제가 있는 메시지는 아니지만,


사람들에게 너무 딱딱하고, 또한 권한에 따라서 메시지를 다르게 하고 싶은 경우가 있습니다.


이런 경우 이렇게 해보세요.


less..

파일 몇 개 수정합니다.


1. 원하는 메시지를 마구마구 추가하세요


common/lang/ko.lang.php 에서


    $lang->msg_not_permitted_member1 = '당신 빼고 다 열람 가능합니다 :)';

   $lang->msg_not_permitted_member2 = '잘생긴 사람 이상 열람 가능합니다 :)';

   $lang->msg_not_permitted_member3 = '로그인 후 열람 가능합니다 :)';


이렇게 말입니다.


2. 권한 정보를 잠시 빼옵니다. 당장 해킹의 위험이 있는것은 아니지만, zbxe에서 원하는 객체지향적인면에서 권한을 알 필요가 없는 곳에서 권한을 가져온다는면에서 바람직하지는 않습니다만, 각오하고 쓰세요 ㅋㅋㅋㅋ


classes/module/ModuleObject.class.php 의 약 182줄 부터

             // 권한변수 설정
            $this->grant = $grant;
            Context::set('grant', $grant);

                // 권한값을알기위한설정
            Context::set('grants', $this->module_info->grants);

            if(method_exists($this, 'init')) $this->init();

가운데 Context::set('grants', $this->module_info->grants); 를 추가하시는겁니다.



3. 지금은 board모듈에서 수정합니다. 다른 모듈도 비슷하게 시도해보세요..


modules/board/board.view.php 약 58줄 부터

         /**
         * @brief 목록 및 선택된 글 출력
         **/
        function dispBoardContent() {
            /**
             * 목록보기 권한 체크 (모든 권한은 ModuleObject에서 xml 정보와 module_info의 grant 값을 비교하여 미리 설정하여 놓음)
             **/

            $grants = Context::get('grants');

            if(!$this->grant->list)

            /**
            * module_info에서 권한을 검사하여 해당하는 메시지 출력
            **/
{
            if (in_array('2',$grants['view'])) // 그룹2에게 보기 권한이 있을 때
                return $this->dispBoardMessage('msg_not_permitted_member2');
            elseif (in_array('3',$grants['view'])) // 그룹3에게 보기 권한이 있을 때
                return $this->dispBoardMessage('msg_not_permitted_member3');
            elseif (in_array('4',$grants['view'])) // 그룹4에게 보기 권한이 있을 때
                return $this->dispBoardMessage('msg_not_permitted_member4');
            else
                return $this->dispBoardMessage('msg_not_permitted');

}
 

위 파일 경우는, 사실 원래는 목록보기 권한이 없을 때 나올 메시지입니다만,

그냥 들어왔는데, 로그인해라길래 들어오니까 등급이안된다고 안보여주면 짜증나니까

모든 권한을 가진 그룹을 알려주는 것 입니다. 논리적인 순서에 맞게 배치하세요.


modules/board/board.view.php 약 151줄 부터

                     // 글 보기 권한을 체크해서 권한이 없으면 오류 메세지 출력하도록 처리
                    if(!$this->grant->view && !$oDocument->isGranted()) {
                        $oDocument = null;
                        $oDocument = $oDocumentModel->getDocument(0);

                        Context::set('document_srl','',true);
                        if (in_array('2',$grants['view'])) //그룹2에게 보기 권한이 있을 때
                                return $this->alertMessage('msg_not_permitted_member1');
                        elseif (in_array('3',$grants['view'])) //그룹3에게 보기 권한이 있을 때
                                return $this->alertMessage('msg_not_permitted_member2');
                        elseif (in_array('4',$grants['view'])) // 그룹4에게 보기 권한이 있을 때
                                return $this->alertMessage('msg_not_permitted_member3');
                        else
                                return $this->alertMessage('msg_not_permitted');

                    } else {
 

소스 건드실 분들은 아시겠지만, 저기 2,3,4들은 group_srl입니다. 직접 값을 모르시면 잘 찾아보세요...


 

추 가) 관리자로 로그인하셔서 관리 -> 회원 -> 그룹관리 -> 해당 그룹의 수정 링크의 속성에서 링크 주소를 보시면 group_srl=숫자 가 나옵니다. 이 숫자가 해당 그룹의 시리얼넘버이구요, 저기 '2', '3'등과 같이 있는 곳에 해당 숫자를 넣으시면 됩니다 :)


출처: http://blog.bandoche.com/101 [Parker Falcon :: Grooving on the paper]

 
댓글은 로그인 사용자만 작성 가능합니다. 로그인하기