관리자 만 대시 보드 액세스를 제한하는 방법은 무엇입니까?


19

WP 관리 영역에 대한 액세스를 관리자를 제외한 모든 사용자로 어떻게 제한합니까?
우리 사이트의 사용자는 필요한 모든 기능을 수행하는 자신의 프로필 페이지를 가지고 있습니다.

따라서 관리자는 관리자를 제외한 모든 사람에게 제한을 두지 않아야합니다.

그렇게하는 방법?


yourdomain.com/wp-admin 에있는 항목에 액세스 할 필요가없는 '앞면'사용자 페이지가 있음을 의미합니다 .
curtismchale

네 맞습니다. 그것에 문제가 있습니까?
Robin I Knight

아뇨.
curtismchale

답변:


19

우리는 admin_init작업에 연결 current_user_can()하고 현재 사용자가 할 수 있는지 확인 하는 기능을 사용하여 사용자가 관리자 인지 확인할 수 있습니다 manage_options. 이는 관리자 만 할 수있는 일입니다.

이 코드는 functions.php 파일에 붙여 넣을 때 관리자가 아닌 사람이 대시 보드에 액세스하려고 할 때 메시지를 표시합니다.

function wpse_11244_restrict_admin() {

    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __( 'You are not allowed to access this part of the site' ) );
    }
}

add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

원하는 경우 사용자를 홈 페이지로 리디렉션하여 더 나은 사용자 환경을 제공 할 수 있습니다.

function wpse_11244_restrict_admin() {

    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_redirect( home_url() );
        exit;
    }
}

add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

사용자를 자신의 프로필 페이지로 리디렉션하려면 home_url()위 코드를 링크로 바꿉니다.


이 답변은 질문의 요구 사항을 충족하지 않습니다. 먼저 "manage_options"기능이있는 사용자에게 관리 영역에 대한 액세스를 비활성화하고 기능을 관리자뿐만 아니라 여러 역할에 할당 할 수 있습니다. 또한 "manage_options"기능을 관리자에서 제거 할 수 있습니다.
cybmeta

기능을 검사하는 @cybmeta manage_options는 관리자를 검사하는 데 허용되는 방법입니다. Mark Jaquith 조차도 이렇게 말합니다
shea

질문자는 관리자 역할 확인을 정확하게 요청했으며 정확한 답변을 제공하고 기능 확인이 더 나은시기와 이유를 설명하는 것이 중요하다고 생각합니다. manage_options"관리자"만 할 수 있고 사실이 아니며, manage_options기능이며 관리자 역할에서 제거되거나 다른 사용자 역할에 할당 될 수 있다고 말합니다 . 중요한 것은하고 싶은 일을 알고 최선의 방법을 선택하는 것입니다. 내 대답을 참조하십시오.
cybmeta

선생님, +1하세요! :) 이것을 몇 시간 동안 찾고 있었다! 또한 약간의 개선. 단일 사이트로 충분합니다. 다중 사이트의 경우는 교체 할 것 manage_options으로 manage_network. 후자는 기본 "사이트 관리자"에 대해서도 대시 보드를 비활성화하지만 최고 관리자 (네트워크 관리자)는 액세스 권한을 유지합니다.
rkeet

이 답변의 주요 문제는 ajax 호출과 충돌한다는 것입니다. @cybmeta는 아래에 정답이 있습니다.
RiotAct


9

주어진 답변 중 일부는 대부분의 상황에서 괜찮을 수 있지만 사용자 역할을 확인하는 답변, 기능 및 기능을 할당하고 양식 역할을 제거 할 수 있는지 확인하는 답변이 없기 때문에 요청 된 내용을 정확하게 수행한다고 보증하는 사람은 없습니다. 따라서 정확한 답변을 제공하려면 기능이 아닌 사용자 역할을 확인해야합니다.

add_action( 'admin_init', 'allow_admin_area_to_admins_only');
function allow_admin_area_to_admins_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls
            return;
      }

      $user = wp_get_current_user();

      if( empty( $user ) || !in_array( "administrator", (array) $user->roles ) ) {
           //Redirect to main page if no user or if the user has no "administrator" role assigned
           wp_redirect( get_site_url( ) );
           exit();
      }

 }

사용자에게 "manage_options"기능이 있는지 확인하려면 할 수 있습니다. 실제로 대부분의 경우 가장 적합한 옵션입니다. 이 기능은 기본적으로 관리자에게 연결되어 있지만 기능을 관리자 역할에서 제거하거나 다른 사용자 역할에 할당 할 수 있습니다. 따라서 대부분의 경우 사용자 역할을 확인하는 것보다 사용자가 할 수 있거나 할 수없는 것을 확인하는 것이 좋습니다. 따라서 대부분의 경우 기능 확인이 선택되어야하지만이 개념을 명확하게 이해하고 상황과 목적에 가장 적합한 옵션을 선택하십시오.

add_action( 'admin_init', 'admin_area_for_manage_options_only');
function admin_area_for_manage_options_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls
            return;
      }


      if( ! current_user_can( "manage_options" ) ) {
           //Redirect to main page if the user has no "manage_options" capability
           wp_redirect( get_site_url( ) );
           exit();
      }

 }

이것이 정답입니다. 아약스 호출과 충돌하지 않습니다.
RiotAct

3

관리 플러그인을 사용해보십시오 .
그걸로 물건을 잘 고정시킬 수 있습니다.

htaccess 파일을 통해 액세스를 설정할 수도 있습니다.


1
관리 +1 그것은 플러그인 의 짐승 입니다. 사용자 정의 역할 관리자 플러그인과 함께 사용하면 간단합니다. (개인적인 견해를 인정하지 않는 경우) :::: 마지막 메모 : 링크보다 더 많은 정보를 제공하면 답변이 더 완전 해집니다.
brasofilo

2
function wpse_11244_restrict_admin() {
    if (!current_user_can('update_core')) {
        wp_die(__('You are not allowed to access this part of the site'));
    }
}

add_action('admin_init', 'wpse_11244_restrict_admin', 1);

4
'administrator'기능이 아닙니다. 이전 버전과의 호환성을 유지하기 위해 작동합니다. 'update_core'또는 다른 관리자 기능을 확인하십시오 .
fuxia

또한 기능을 역할에 할당 할 수 있으므로 "관리자"사용자에 대한 액세스를 허용하려면 기능이 아닌 역할을 확인해야합니다.
cybmeta

0

이 라인을 당신의 functions.php

function baw_no_admin_access()
{
 if( !current_user_can( 'administrator' ) ) {
     wp_redirect( home_url() );
     die();
  }
}
add_action( 'admin_init', 'baw_no_admin_access', 1 );

3
@toscho와 같이 '관리자'는 기능이 아니라 대신 'update_core'와 같은 관리 기능을 사용하십시오.
Pierre

0

최종 사용자에게 오류가 발생하지 않도록 시도하십시오. 좋은 UX에 대하여. 이 코드는 홈으로 리디렉션합니다.

    add_action( 'init', 'blockusers_init' );
function blockusers_init() {
if ( is_admin() && ! current_user_can( 'administrator' ) &&
! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
wp_redirect( home_url() );
exit;
}
}

-1

나는 WP 프론트 엔드를 사용 하고 모든 사람들이 관리자를 기대하도록 설정했습니다.


자세한 정보를 제공 한 다음 링크를 제공해주십시오. 답변이보다 완전 해집니다
shea
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.