เราจะ จำกัด การเข้าถึงพื้นที่ผู้ดูแลระบบ WP ให้กับผู้ใช้ทั้งหมดยกเว้นผู้ดูแลระบบอย่างไร
ผู้ใช้บนเว็บไซต์ของเรามีหน้าโปรไฟล์ของตัวเองซึ่งทำหน้าที่ทุกอย่างที่พวกเขาต้องการ
ดังนั้นผู้ดูแลระบบควรปิดขีด จำกัด สำหรับทุกคนยกเว้นผู้ดูแลระบบ
ทำอย่างไร
เราจะ จำกัด การเข้าถึงพื้นที่ผู้ดูแลระบบ WP ให้กับผู้ใช้ทั้งหมดยกเว้นผู้ดูแลระบบอย่างไร
ผู้ใช้บนเว็บไซต์ของเรามีหน้าโปรไฟล์ของตัวเองซึ่งทำหน้าที่ทุกอย่างที่พวกเขาต้องการ
ดังนั้นผู้ดูแลระบบควรปิดขีด จำกัด สำหรับทุกคนยกเว้นผู้ดูแลระบบ
ทำอย่างไร
คำตอบ:
เราสามารถขอการ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
เป็นสิ่งที่ "ผู้ดูแลระบบ" เท่านั้นที่สามารถทำได้และไม่เป็นความจริงmanage_options
เป็นความสามารถและสามารถลบออกจากบทบาทผู้ดูแลระบบหรือกำหนดให้กับบทบาทผู้ใช้อื่น ๆ สิ่งสำคัญคือการรู้ว่าคุณต้องการทำอะไรและเลือกวิธีที่ดีที่สุด ดูคำตอบของฉันฉันอธิบายสิ่งนี้
manage_options
manage_network
หลังจะปิดการใช้งานแดชบอร์ดสำหรับ "ผู้ดูแลไซต์" ที่เป็นค่าเริ่มต้น แต่ปล่อยให้มีการเข้าถึงสำหรับผู้ดูแลระบบขั้นสูง (ผู้ดูแลระบบเครือข่าย)
คุณสามารถเขียนปลั๊กอินและขอadmin_init
ได้
Codex ให้ตัวอย่างกับคุณลักษณะที่คุณกำลังมองหา
http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#Example:_Access_control
บางคำตอบที่ได้นั้นสามารถใช้ได้ในสถานการณ์ส่วนใหญ่ แต่ฉันคิดว่าไม่มีใครรับประกันว่าจะทำสิ่งที่ถูกถามเพราะไม่มีคำตอบที่ตรวจสอบบทบาทผู้ใช้พวกเขาตรวจสอบความสามารถและความสามารถที่สามารถกำหนดและลบบทบาทแบบฟอร์มได้ ดังนั้นเพื่อให้คำตอบที่ถูกต้องจะต้องตรวจสอบบทบาทของผู้ใช้ไม่ใช่ความสามารถ:
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();
}
}
ลองAdminimizeปลั๊กอิน
คุณสามารถล็อคสิ่งต่าง ๆ ลงได้ดีด้วย
คุณสามารถลองตั้งค่าการเข้าถึงผ่านไฟล์ htaccess
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);
'administrator'
ไม่ใช่ความสามารถ มันทำงานเพื่อรักษาความเข้ากันได้ย้อนหลัง ตรวจสอบ'update_core'
หรือความสามารถของผู้ดูแลระบบอื่น ๆ
ใส่สายเหล่านี้ในของคุณ 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 );
ลองสิ่งนี้ไม่เคยมีข้อผิดพลาดต่อหน้าผู้ใช้ ต่อต้าน 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;
}
}
ฉันจะใช้WP Frontendและตั้งค่าให้ทุกคนคาดหวังว่าผู้ดูแลระบบ