วิธี จำกัด การเข้าถึงแดชบอร์ดเฉพาะผู้ดูแลระบบเท่านั้น


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ความสามารถเป็นวิธีที่ได้รับการยอมรับในการตรวจสอบผู้ใช้ที่เป็นผู้ดูแลระบบ แม้มาร์กจาควิ ธกล่าวว่าดังนั้น
เชียบัตเตอร์

ผู้ถามถามว่าจะตรวจสอบบทบาทผู้ใช้ของผู้ดูแลระบบหรือไม่และฉันคิดว่ามันเป็นสิ่งสำคัญที่จะต้องให้คำตอบที่ถูกต้องแก่เขาและอธิบายว่าเมื่อใดและเพราะเหตุใดการตรวจสอบความสามารถ คุณพูดว่าmanage_optionsเป็นสิ่งที่ "ผู้ดูแลระบบ" เท่านั้นที่สามารถทำได้และไม่เป็นความจริงmanage_optionsเป็นความสามารถและสามารถลบออกจากบทบาทผู้ดูแลระบบหรือกำหนดให้กับบทบาทผู้ใช้อื่น ๆ สิ่งสำคัญคือการรู้ว่าคุณต้องการทำอะไรและเลือกวิธีที่ดีที่สุด ดูคำตอบของฉันฉันอธิบายสิ่งนี้
cybmeta

คุณได้รับ +1! :) รับสิ่งนี้มาหลายชั่วโมงแล้ว! นอกจากนี้ยังมีการปรับปรุงเล็กน้อย ไซต์เดียวของคุณเช็คเพียงพอ สำหรับหลาย ๆ เว็บไซต์ที่คุณต้องการที่จะเปลี่ยนด้วยmanage_options manage_networkหลังจะปิดการใช้งานแดชบอร์ดสำหรับ "ผู้ดูแลไซต์" ที่เป็นค่าเริ่มต้น แต่ปล่อยให้มีการเข้าถึงสำหรับผู้ดูแลระบบขั้นสูง (ผู้ดูแลระบบเครือข่าย)
rkeet

ปัญหาหลักของคำตอบนี้คือมันขัดแย้งกับการโทร ajax @cybmeta มีคำตอบที่ถูกต้องด้านล่าง
RiotAct

9

คุณสามารถเขียนปลั๊กอินและขอadmin_initได้

Codex ให้ตัวอย่างกับคุณลักษณะที่คุณกำลังมองหา

http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#Example:_Access_control


1
นี่ไม่ใช่คำตอบที่สมบูรณ์ - ควรมากกว่าคำใบ้และลิงก์
shea

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();
      }

 }

นี่คือคำตอบที่ถูกต้อง มันไม่ได้ขัดแย้งกับการโทร ajax
RiotAct

3

ลองAdminimizeปลั๊กอิน
คุณสามารถล็อคสิ่งต่าง ๆ ลงได้ดีด้วย

คุณสามารถลองตั้งค่าการเข้าถึงผ่านไฟล์ 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 Frontendและตั้งค่าให้ทุกคนคาดหวังว่าผู้ดูแลระบบ


โปรดให้ข้อมูลเพิ่มเติมจากนั้นลิงก์ - มันทำให้คำตอบสมบูรณ์ยิ่งขึ้น
เชีย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.