it-swarm.com.de

Wie kann ich den Dashboard-Zugriff nur auf Administratoren beschränken?

Wie würden wir den Zugriff auf den Administrationsbereich WP auf alle Benutzer mit Ausnahme von Administratoren beschränken?
Die Benutzer unserer Website haben ihre eigenen Profilseiten, die alle Funktionen erfüllen, die sie benötigen.

Daher sollte der Admin für alle außer Administratoren gesperrt sein.

Wie geht das?

19
Robin I Knight

Wir können uns an die Aktion admin_init binden und mithilfe der Funktion current_user_can() prüfen, ob der aktuelle Benutzer manage_options kann, was nur ein Administrator kann.

Dieser Code zeigt beim Einfügen in die Datei functions.php eine Meldung an, wenn ein Nicht-Administrator versucht, auf das Dashboard zuzugreifen:

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

Wenn Sie möchten, können Sie die Benutzerfreundlichkeit verbessern, indem Sie den Benutzer stattdessen auf die Startseite umleiten:

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

Wenn Sie den Benutzer zu seiner Profilseite umleiten möchten, ersetzen Sie home_url() im obigen Code durch den Link.

19
shea

Einige der gegebenen Antworten können in den meisten Situationen in Ordnung sein, aber ich denke, keine von ihnen garantiert, genau das zu tun, was gefragt wird, weil keine der Antworten Benutzerrollen prüft, sie Fähigkeiten überprüfen und Fähigkeiten können Formularrollen zugewiesen und entfernt werden. Um eine genaue Antwort zu geben, müssen die Benutzerrollen überprüft werden, nicht die Funktionen:

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

 }

Wenn Sie überprüfen möchten, ob der Benutzer über die Funktion "manage_options" verfügt, können Sie dies tun. Tatsächlich ist es in den meisten Fällen die beste Option. Obwohl diese Funktion standardmäßig Administratorbenutzern zugeordnet ist, kann sie aus der Administratorrolle entfernt oder anderen Benutzerrollen zugewiesen werden. Aus diesem Grund ist es in den meisten Fällen besser, zu überprüfen, was der Benutzer kann oder nicht, als die Benutzerrolle zu überprüfen. In den meisten Fällen sollte die Überprüfung der Fähigkeiten der gewählte Weg sein, aber Sie müssen dieses Konzept klarstellen und die beste Option für Ihre Situation und Ihren Zweck auswählen:

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

 }
9
cybmeta

Sie könnten ein Plugin schreiben und sich in admin_init einbinden.

Der Codex gibt tatsächlich ein Beispiel für die gesuchte Funktion.

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

9
Wietse Venema

Probieren Sie das Adminimize Plugin aus.
Damit kann man ziemlich gut abschließen.

Sie können auch versuchen, den Zugriff auf über die htaccess-Datei einzurichten.

3
goofydg1
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);
2
Gabi

Versuchen Sie dies, niemals durch Fehler gegenüber einem Endbenutzer. Gegen eine gute UX. Dieser Code leitet sie zu Home weiter.

    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;
}
}
0
Ahmad Awais

Tragen Sie diese Zeilen in Ihren functions.php ein

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