Kboard(케이보드) 읽기 및 쓰기 권한 관련하여 질문입니다.

안녕하세요, 좋은 제품 항상 잘 쓰고 있습니다.

현재 저는 코스모스팜 회원관리 플러그인 그리고 케이보드를 함께 사용하고 있습니다. 

최근에 케이보드에 쓴 글을 '특정 역할(Role)'을 가진 분들만 읽도록 변경하고자 합니다.

이는 워드프레스 관리자 패널에 있는 케이보드에 들어가면 가능한 것으로 확인되었습니다.

아래 사진처럼 'Permission' 에 있는 '읽기 권한'에서 특정 역할(Role)을 선택하면 되기 때문입니다.

하지만 여기서 한 가지 궁금한 점이 있습니다.

저는 케이보드에 쓰는 글 중 카테고리가 '공지사항'인 것은 역할에 상관없이 누구나 읽을 수 있도록 하고 싶습니다.

즉, 모든 글은 '읽기 권한'을 통하여 관리자와 구독자만 읽을 수 있도록 하고 오로지 카테고리가 '공지사항'으로 분리되는 글만 역할에 상관없이 읽을 수 있도록 하고 싶습니다.

현재 시스템에서 이것이 가능할까요?

가능하지 않다면, 유료 기술 지원으로라도 이 기능을 구현하고 싶은데 그것은 가능할까요?

____

케이보드 관련 질문이 하나 더 있어 여기에 덧 붙입니다.

현재 저는 케이보드에 글을 쓸 수 있는 사람을 '로그인을 한 사람'으로 설정해두었습니다.

따라서 비 로그인자가 글쓰기를 누르면 아래 사진 같이 '권한이 없습니다.'라는 말일 뜨면서 로그인 페이지로 넘어갑니다.

저는 이 '권한이 없습니다.' 라는 문구를 '로그인이 필요합니다.' 라는 문구로 바꾸고 싶습니다.

어떻게 하면 가능할까요?

 

항상 감사드립니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
  • 안녕하세요~^^

    KBoard 플러그인에서 공지사항은 읽기권한 설정을 따릅니다.

    모든 사용자에게 표시되게 하시려면

    아래 링크를 참고하셔서 코드를 수정해보시겠어요?

    https://www.cosmosfarm.com/threads/document/17272

     

    글쓰기 버튼은 쓰기권한이 있는 사용자에게만 표시되도록 설정되어 있습니다.

    스킨 파일을 별도로 수정하신 건지요?

    아래의 코드를 활용해보시겠어요?

    add_action('kboard_skin_header', 'kboard_skin_header_2020_03_09', 10, 1);
    function kboard_skin_header_2020_03_09($builder){
    	$board = $builder->board;
    	if($board->id == '1' && kboard_mod() == 'editor' && !is_user_logged_in()){ // 실제 게시판 id로 적용해보세요.
    		add_filter('gettext', 'gettext_2020_03_09', 10, 3);
    	}
    }
    
    function gettext_2020_03_09($translated_text, $text, $domain){
    	if($domain == 'kboard'){
    		switch ($translated_text){
    			case '권한이 없습니다.': $translated_text = '로그인이 필요합니다.'; break;
    		}
    	}
    
    	return $translated_text;
    }

    위의 코드에서 $board->id == '1' 부분은 실제 게시판 id로 적용해주세요.

    테마의 functions.php 파일에 코드를 추가하거나 Code Snippets 플러그인을 사용해서 코드를 추가할 수 있습니다.

    고맙습니다.

  • 안녕하세요, 답변 감사드립니다.

    글쓰기 버튼에 관련한 질문은 알려주신 코드로 해결하였습니다.

    그런데 케이보드 읽기 권한에 대한 부분이 제대로 작동하지 않습니다.

    제가 설정한 케이보드 읽기 권한은 아래 이미지와 같습니다.

    알려주신 링크(https://www.cosmosfarm.com/threads/document/17272) 대로 코드를 변경하였으나, 여전히 공지사항을 '모든 사람'이 볼 수 없게 되어 있습니다.

    즉, 여전히 '공지사항'은 제가 설정한 읽기 권한대로 구독자와 관리자만 볼 수 있습니다ㅠㅠ

    코드를 분명히 제대로 고쳤는데 어떻게 된 것일까요ㅠㅠ! 원하신다면 KBoardBuilder.class.php를 보내드릴 수도 있습니다.

    감사합니다!

  • 안녕하세요.

    저희 쪽 테스트 서버에서는

    이전 댓글에 안내해드린 링크의 코드를 적용했을 때

    읽기권한이 설정되어 있더라도 공지사항은 비회원 사용자도 볼 수 있는 것을 확인했습니다.

    builderOrder 메소드에도 비슷한 코드가 있습니다.

    builderDocument 메소드 쪽을 수정하신 게 맞는지요? 

     

    KBoardBuilder.class.php 파일 전체가 아닌 수정하신 부분을

    에디터의 코드 스니펫 삽입 기능으로 올려주시겠어요?

    고맙습니다.

  • 안녕하세요! 

    말씀하신 부분을 찾아보니 제가 builderOrder 메소드를 고친 것으로 확인했습니다.

    그래서 원래대로 되돌린 후, builderDocument 메소드 쪽을 수정하려고 하였는데 다음과 같은 어려움을 발견했습니다.

    말씀해주신 링크에 있는 설명에 따르면, 아래와 같은 코드를 찾아야 합니다.

    public function builderDocument(){
    
    ...
    
    $allow_document = false;
    if(!$this->board->isReader($content->member_uid, $content->secret)){
    
    ...
    
    }

    그런데, 제가 builderDocument 메소드 쪽에서 찾은 코드는 아래와 같습니다.

    public function builderDocument(){
    
    ...
    
    
    $allow_document = false;
    if(!$content->isReader()){
    if($this->board->permission_read != 'all' && !is_user_logged_in()){
    
    ...
    
    

    즉, <$allow_document = false;> 이 부분을 찾아서 고칠 수는 있겠는데, 아래에 있는 조건문이 링크에 걸린 것과 제가 가지고 있는 KBoardBuilder.class.php 파일에서 다르게 나와, 어떤 IF 앞에 else를 붙여야 하는지 모르겠습니다ㅠㅠ.

    이 부분을 어떻게 해결하면 좋을까요? 감사합니다!

  • 최신 버전의 KBoard 플러그인에는 올려주신 것처럼

    아래의 코드로 적용되어 있습니다.

    $allow_document = false;
    		if(!$content->isReader()){
    			if($this->board->permission_read != 'all' && !is_user_logged_in()){

    위의 코드를 찾아서

    아래의 코드로 교체해서 확인해보시겠어요?

    $allow_document = false;
    if($content->notice){
    	$allow_document = true;
    }
    else if(!$content->isReader()){
    	if($this->board->permission_read != 'all' && !is_user_logged_in()){

    고맙습니다.

  • 안녕하세요, 말씀하신 부분을 수정하니 공지시항을 모두 볼 수 있게 되었습니다.

    정말 감사합니다.

    마지막으로 하나만 더 여쭙고 싶습니다.

    현재 저는 포럼 게시판을 읽을 수 있는 권한을 관리자와 구독자에게만 주었습니다. (아래 사진 참조)

    https://imgur.com/mFswj7P

     

    그래서 알려주신 코드를 사용하여 비로그인자가 포럼 게시판을 클릭했을 때,

    "구독자만 볼 수 있습니다." 라는 문구가 나오도록 만들었습니다. (아래 코드 참조)

    add_action('kboard_skin_header', 'kboard_skin_header_2020_03_09', 10, 1);
    function kboard_skin_header_2020_03_09($builder){
    	$board = $builder->board;
    	if($board->id == '1' && kboard_mod() == 'editor' && !is_user_logged_in()){ // 실제 게시판 id로 적용해보세요.
    		add_filter('gettext', 'gettext_2020_03_09', 10, 3);
    	}
    }
    
    function gettext_2020_03_09($translated_text, $text, $domain){
    	if($domain == 'kboard'){
    		switch ($translated_text){
    			case '권한이 없습니다.': $translated_text = '구독자만 볼 수 있습니다.'; break;
    		}
    	}
    
    	return $translated_text;
    }

     

    그런데, 문제는 '로그인을 한 사용자'가 포럼 게시판을 클릭했을 때는 여전히 '권한이 없습니다.' 라고 나온다는 것 입니다.

    로그인을 한 사용자에게도 '권한이 없습니다.'가 아니라 '구독자만 볼 수 있습니다.' 라고 나오게 할 수 있을까요?

    항상 감사드립니다!

  • 안녕하세요.

    is_user_logged_in 함수로 로그인 여부를 체크하기 때문에

    다른 방법으로 체크를 해보셔야 할 듯합니다.

    wp_get_current_user 함수 등을 활용해서 사용자 역할을 체크해보시겠어요?

    아래 관련 링크를 참고해보세요.

    https://wordpress.stackexchange.com/questions/5047/how-to-check-if-a-user-is-in-a-specific-role

    고맙습니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요