Gösterge tablosunun yalnızca Admins'e erişimini nasıl kısıtlarsınız?


19

WP yönetici alanına erişimi yöneticiler dışındaki tüm kullanıcılarla nasıl kısıtlayabiliriz?
Sitemizdeki kullanıcılar, ihtiyaç duydukları tüm işlevleri yerine getiren kendi profil sayfalarına sahiptir.

Bu nedenle yönetici, yöneticiler dışındaki herkes için sınırsız olmalıdır.

Bu nasıl yapılır?


Etki alanı.com/wp-admin adresinde bulunan hiçbir şeye erişmeyi gerektirmeyen 'öne bakan' kullanıcı sayfaları mı var?
curtismchale

Evet kesinlikle. Bununla ilgili yanlış bir şey var mı?
Robin I Knight

Hayır sadece açıklığa kavuşturmak.
curtismchale

Yanıtlar:


19

Biz kanca admin_initeylem ve kullanıcı kullanarak bir yönetici olup olmadığını kontrol current_user_can()geçerli kullanıcı edemediğini görmek üzere fonksiyon manage_optionsyalnızca bir yönetici yapabileceği bir şeydir.

Bu kod, function.php dosyanıza yapıştırıldığında, yönetici olmayan bir kişi kontrol paneline erişmeye çalıştığında bir mesaj görüntüler:

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

İsterseniz, kullanıcıyı ana sayfaya yönlendirerek daha iyi bir kullanıcı deneyimi sağlayabilirsiniz:

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

Kullanıcıyı profil sayfasına yönlendirmek istiyorsanız, home_url()yukarıdaki kodu bağlantıyla değiştirin.


Bu cevap sorunun gereksinimlerini karşılamıyor. İlk olarak, "manage_options" özelliğine sahip bir kullanıcıya yönetici alanına erişimi devre dışı bırakıyorsunuz ve bu özellik yalnızca yöneticiye değil, birden çok role atanabiliyor. Ayrıca, "manage_options" özelliği yöneticiden kaldırılabilir.
cybmeta

@cybmeta manage_optionsyeteneğini denetleme, yönetici kullanıcıyı denetlemenin kabul edilen yoludur. Mark Jaquith bile böyle diyor
shea

Sorgulayan kişi tam olarak yönetici kullanıcı rolünü kontrol etmesini istedi ve bence ona tam cevabı vermenin ve yeteneklerin ne zaman ve neden daha iyi olabileceğini açıklamanın önemli olduğunu düşünüyorum. manage_optionsYalnızca "yöneticilerin" yapabileceği ve bu doğru olmayan manage_options, bir özellik olduğunu ve yönetici rolünden kaldırılabileceği veya diğer kullanıcı rollerine atanabileceği bir şey olduğunu söylüyorsunuz . Önemli olan ne yapmak istediğinizi bilmek ve en iyi yolu seçmek. Cevabımı gör, bunu açıklarım.
cybmeta

Siz efendim, +1 alın! :) Bunu saatlerdir arıyordum! Ayrıca küçük bir gelişme. Tek site çekiniz yeterlidir. Çok site için değiştirmek isterdim manage_optionsile manage_network. İkincisi, varsayılan "site yöneticileri" için de gösterge tablosunu devre dışı bırakır, ancak Süper Yöneticiler (Ağ yöneticileri) için erişimi kullanılabilir durumda bırakır.
rkeet

Bu cevapla ilgili asıl mesele, ajax çağrılarıyla çakışmasıdır. @cybmeta aşağıda doğru cevabı vermektedir.
RiotAct


9

Verilen cevapların bazıları çoğu durumda iyi olabilir, ancak bunların hiçbirinin tam olarak ne istediğini garanti etmediğini düşünüyorum, çünkü cevapların hiçbiri kullanıcı rollerini kontrol etmiyor, yetenekleri ve yetenekleri kontrol edebiliyor ve form rolleri atanabiliyor. Bu nedenle, kesin bir cevap vermek için, kullanıcı rolleri yetenekler değil kontrol edilmelidir:

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

 }

Kullanıcının "manage_options" özelliğine sahip olup olmadığını kontrol etmek isterseniz, bunu yapabilirsiniz. Aslında, çoğu durumda en iyi seçenektir. Bu özellik varsayılan olarak yönetici kullanıcılarıyla ilişkilendirilmiş olsa da, yönetici yönetici rolünden kaldırılabilir veya diğer kullanıcı rollerine atanabilir. Bu nedenle, çoğu durumda, kullanıcının neler yapabileceğini veya yapamayacağını kontrol etmek, kullanıcı rolünü kontrol etmekten daha iyidir. Bu nedenle, çoğu durumda yetenekleri kontrol etmek seçilen yol olmalıdır, ancak bu kavramı netleştiriyor ve durumunuz ve amacınız için en iyi seçeneği seçiyorsunuz:

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

 }

Bu doğru cevap. Ajax çağrıları ile çatışmaz.
RiotAct

3

Yönetici eklentisini deneyin .
Bununla çok iyi kilitleyebilirsiniz.

Htaccess dosyası üzerinden erişimi ayarlamayı da deneyebilirsiniz


1
Yönetici için +1. Bu bir eklenti canavarı . Bazı özel rol yöneticisi eklentisi ile birleştiğinde, sadece sallanır. (Kişisel bir fikrimi kabul etmezsem ) :::: Son not olarak: lütfen sadece linklerden daha fazla bilgi verin, cevabı daha eksiksiz hale getirir.
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'bir yetenek değildir. Sadece geriye dönük uyumluluğu korumak için çalışır. 'update_core'Veya diğer yönetici özelliklerini kontrol edin .
fuxia

Ayrıca, rollere yetenekler atanabilir, bu nedenle "yönetici" kullanıcıya erişime izin vermek istiyorsanız, yetenekleri değil rolleri kontrol etmelisiniz.
cybmeta

0

Bu satırları 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 gibi 'yönetici' bir yetenek değil, bunun yerine 'update_core' gibi yönetici yeteneklerini kullanın
Pierre

0

Bunu asla bir son kullanıcının karşısındaki hatalardan geçmeyin. İyi bir UX'a karşı. Bu kod onları Ana Sayfa'ya yönlendirir.

    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

Ben WP Frontend kullanmak ve herkes yöneticileri bekliyoruz için ayarlayın.


Lütfen bir bağlantıdan sonra daha fazla bilgi verin - bir cevabı daha eksiksiz hale getirir
shea
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.