it-swarm.com.de

Wie kann der Zugriff auf wp-admin für bestimmte Benutzerrollen verhindert werden?

Ich habe versucht, das Plug-in Front-End-Benutzer zu verwenden, aber dies kollidiert mit etwas, da es den Zugriff auf einige Front-End-Seiten verhindert. Ich muss es also manuell so einstellen, dass jeder, der keinen von zwei Benutzernamen (oder Rollen) hat, nicht auf wp-admin zugreifen kann.

6
Claire

Plugin

Es ist im Grunde nur eine Überprüfung der Benutzerfähigkeit, gefolgt von einer Umleitung in einem Exit-Aufruf. Anschließend wird zu der Site weitergeleitet, von der die Anforderung stammt.

<?php
! defined( 'ABSPATH' ) AND exit;
/* Plugin Name: (#66093) »kaiser« Deny Admin-UI access for certain roles */


function wpse66093_no_admin_access()
{
    $redirect = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : home_url( '/' );
    if ( 
        current_user_can( 'USER_ROLE_NAME_HERE' )
        OR current_user_can( '2ND_ROLE_NAME_HERE' )
    )
        exit( wp_redirect( $redirect ) );
}
add_action( 'admin_init', 'wpse66093_no_admin_access', 100 );
14
kaiser

In der akzeptierten Antwort wird Benutzerrolle erwähnt, es wird jedoch die Funktion für Benutzerkapazität verwendet.

Hier ist die Lösung für Benutzerrollen

 function wpse66094_no_admin_access() {
    $redirect = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : home_url( '/' );
    global $current_user;
    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);
    if($user_role === 'YOUR_USER_ROLE_HERE'){
        exit( wp_redirect( $redirect ) );
    }
 }

add_action( 'admin_init', 'wpse66094_no_admin_access', 100 );
2
Akshay Agarwal

Ausgehend von der Antwort von @kaiser (vielen Dank übrigens) ist dies mein Arbeitscode, der auf jeden Fall von jemandem benötigt wird. Es befindet sich in der functions.php-Datei.

Die verwendete Bedingung ist, wenn der Benutzer nicht manage_options oder edit_posts kann.

function wpse66093_no_admin_access() {
    $redirect = home_url( '/' );
    if ( ! ( current_user_can( 'manage_options' ) || current_user_can( 'edit_posts' ) ) )
        exit( wp_redirect( $redirect ) );
}
add_action( 'admin_init', 'wpse66093_no_admin_access', 100 );
2
Carlos B

Bei der Antwort von @ kaiser muss der Hook admin_menu über admin_init verwendet werden, da er vor dem Einchecken von! User_can_access_admin_page () in wp-admin/includes/menu.php ausgelöst wird. Andernfalls hat der Benutzer keinen Lesezugriff auf Im Dashboard erhalten sie nur die Meldung "Sie haben nicht genügend Berechtigungen, um auf diese Seite zuzugreifen." Seite anstatt umgeleitet zu werden.

Wenn Sie die Funktion read aus der Rolle entfernen, kann der Benutzer nicht auf das Dashboard zugreifen. Sie erhalten den folgenden Fehler:

Sie haben keine ausreichenden Berechtigungen, um auf diese Administrationsseite zuzugreifen.

Grund: Der aktuelle Benutzer verfügt nicht über die "Lesefunktion", die für den Zugriff auf den Menüpunkt "Dashboard" erforderlich ist.

Ref: https://codex.wordpress.org/Roles_and_Capabilities#read

0
MarcGuay