केवल Admins तक डैशबोर्ड की पहुँच कैसे प्रतिबंधित करें?


19

हम प्रवेशकों को छोड़कर सभी उपयोगकर्ताओं के लिए WP व्यवस्थापक क्षेत्र तक पहुंच कैसे प्रतिबंधित करेंगे?
हमारी साइट के उपयोगकर्ताओं के पास अपने प्रोफ़ाइल पृष्ठ हैं जो उन सभी कार्यों को करते हैं जिनकी उन्हें आवश्यकता है।

तो व्यवस्थापक को छोड़कर सभी को सीमा से बाहर होना चाहिए।

उसको कैसे करे?


आपका मतलब है कि 'सामने की ओर' उपयोगकर्ता पृष्ठ हैं जिन्हें yourdomain.com/wp-admin पर स्थित कुछ भी एक्सेस करने की आवश्यकता नहीं है ?
curtismchale

हाँ बिल्कुल। क्या उस के साथ कुछ गड़बड़ है?
रॉबिन I नाइट

नहीं बस स्पष्ट करना।
करिश्माचल

जवाबों:


19

हम admin_initक्रिया और जांच करने के लिए हुक कर सकते हैं कि क्या उपयोगकर्ता current_user_can()फ़ंक्शन का उपयोग करके यह देखने के लिए है कि वर्तमान उपयोगकर्ता कर सकता है manage_options, जो कि केवल एक व्यवस्थापक कर सकता है।

यह कोड, जब आपके फ़ंक्शन.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क्षमता के लिए @cybmeta जाँच किसी व्यवस्थापक उपयोगकर्ता के लिए जाँच करने का स्वीकृत तरीका है। यहां तक ​​कि मार्क जैक्विथ भी कहते हैं
शी

प्रश्नकर्ता ने व्यवस्थापक उपयोगकर्ता की भूमिका के लिए जाँच करने के लिए कहा और मुझे लगता है कि उसे सटीक उत्तर देना और यह बताना महत्वपूर्ण है कि क्षमता की जाँच कब और क्यों बेहतर हो सकती है। आप कहते हैं कि manage_optionsऐसा कुछ है जो केवल "व्यवस्थापक" कर सकते हैं और यह सच नहीं है, manage_optionsएक क्षमता है और इसे व्यवस्थापक भूमिका से हटा दिया जा सकता है या अन्य उपयोगकर्ता भूमिकाओं को सौंपा जा सकता है। महत्वपूर्ण बात यह जानना है कि आप क्या करना चाहते हैं और सबसे अच्छा तरीका चुन सकते हैं। मेरा जवाब देखिए, मैं इसे समझाता हूं।
साइबरमेट

आप सर, एक +1 प्राप्त करें! :) घंटे के लिए यह देख रहे हैं! एक छोटा सा सुधार भी। एकल साइट आपकी जाँच पर्याप्त है। बहु-साइट के लिए आप के manage_optionsसाथ बदलना चाहते हैं manage_network। बाद वाला डैशबोर्ड डिफ़ॉल्ट रूप से "साइट प्रशासक" के लिए भी अक्षम होगा लेकिन सुपर प्रशासक (नेटवर्क व्यवस्थापक) के लिए उपलब्ध पहुंच छोड़ दें।
11

इस जवाब के साथ मुख्य मुद्दा यह है कि यह अजाक्स कॉल के साथ टकराता है। @cybmeta के पास सही उत्तर है।
दंगा

9

आप एक प्लगइन और हुक लिख सकते हैं admin_init

कोडेक्स वास्तव में उस विशेषता के साथ एक उदाहरण देता है जिसे आप खोज रहे हैं।

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


1
यह एक पूर्ण उत्तर नहीं है - यह एक संकेत और एक लिंक और अधिक होना चाहिए
शिया

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

 }

यह सही जवाब है। यह अजाक्स कॉल के साथ संघर्ष नहीं करता है।
दंगा

3

व्यवस्थापक प्लगइन का प्रयास करें ।
तुम उस के साथ बहुत अच्छी तरह से बातें बंद कर सकते हैं।

आप htaccess फ़ाइल के माध्यम से पहुँच स्थापित करने का भी प्रयास कर सकते हैं


1
व्यवस्थापन के लिए +1। यह एक प्लगइन का एक जानवर है। कुछ कस्टम रोल मैनेजर प्लगइन के साथ युग्मित, यह बस चट्टानों। (यदि मैं एक व्यक्तिगत राय का बहाना करता हूं) :::: अंतिम नोट के रूप में: कृपया केवल लिंक की तुलना में अधिक जानकारी दें, यह उत्तर को और अधिक पूर्ण बनाता है।
ब्रासोफिलो

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

इसके अलावा, क्षमताओं को भूमिकाओं के लिए सौंपा जा सकता है, इसलिए यदि आप "व्यवस्थापक" उपयोगकर्ता तक पहुंच की अनुमति देना चाहते हैं, तो आपको भूमिकाओं की जांच करनी चाहिए, क्षमताओं की नहीं।
सायम्बेटा

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' जैसी व्यवस्थापक क्षमताओं का उपयोग करें
पियरे

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.