it-swarm.com.de

Überprüfen Sie anhand der Benutzer-ID, ob der Benutzer Administrator ist

Irgendwelche Ideen, wie Sie überprüfen können, ob der Benutzer ( nach Benutzer-ID ) Administrator ist? Ich meine nicht, derzeit angemeldete Benutzer.

5
jmeinlschmidt

Sie haben es so formuliert, wie Sie prüfen möchten, ob der Benutzer Administrator Rolle hat. Es wird als angemessener erachtet, nach Fähigkeit zu suchen, was für eine bestimmte Aktion relevant ist.

In der Praxis wird dies normalerweise als current_user_can( 'manage_options' ) für den aktuellen Benutzer ausgedrückt. Für einen beliebigen Benutzer wäre es user_can( $user_id, 'manage_options' ).

Dies ist natürlich eine Fähigkeit, die für die allgemeine Konfiguration der Site steht. Abhängig von Ihrem Verwendungszweck möchten Sie möglicherweise einen anderen verwenden, siehe Liste in Dokumentation zu Rollen und Funktionen .

13
Rarst

Ich füge nur zu @Rarst Antwort hinzu.

Technisch gesehen können Sie den Rollennamen für diese Funktionen angeben, sodass current_user_can( 'administrator' ) oder user_can( $user_id, 'administrator' ) ebenfalls funktionieren würde, aber es ist nicht empfehlenswert .

Die Überprüfung anhand bestimmter Rollen anstelle einer Funktion wird teilweise unterstützt. Von dieser Vorgehensweise wird jedoch abgeraten, da sie möglicherweise zu unzuverlässigen Ergebnissen führt.

Hinweis: Gibt immer true zurück, wenn der aktuelle Benutzer ein Superadministrator ist, sofern dies nicht ausdrücklich verweigert wird.

Sie könnten anhand der Rolle prüfen, ohne sich auf diese Funktionen zu verlassen (da sie unzuverlässig sind), aber wie @Rarst sagte, ist es sinnvoller, statt der Rolle nach Funktionen zu suchen.

Ein Hauptvorteil der Verwendung von Funktionen anstelle von Rollen ist der folgende.

Nehmen wir zum Beispiel an, Sie haben mehr als einen Administrator auf Ihrer Site. Angenommen, Sie möchten, dass Ihr Client Administrator ist, und Sie sind auch Administrator der Site.

Jetzt ist es sinnvoll, dass Ihr Client über Administratorrechte für seine Site verfügt, Sie möchten jedoch möglicherweise nicht, dass er Plugins für die Site installieren kann. Das wäre dein Job als Webmaster.

Wenn Sie also nach Rollen suchen, müssen Sie die Funktionen für alle in dieser Rolle deaktivieren/aktivieren.

Wenn Sie jetzt Funktionen verwenden, haben Sie mehr Detailgenauigkeit, wenn Sie Benutzern bestimmte Aktionen gewähren oder verbieten.

Zurück zu meinem Szenario: Wenn Sie Ihrem Client-Administrator Berechtigungen erteilen möchten, aber keine Plugins installieren können, ist dies ganz einfach

add_filter( 'user_has_cap', 'client_admin_cap_filter', 10, 3 );
function client_admin_cap_filter( $allcaps, $cap, $args ){

  // the requested capability and our client user id 
  if ( 'install_plugins' == $args[0] && $args[1] == 2 ) 
    $allcaps[ $cap[0] ] = false;

  return $allcaps;
}

wir könnten eine Reihe verschiedener Funktionen bereitstellen, die wir einschränken möchten, z. B. update_core, manage_options, install_plugins, install_themes usw.

Unsere Funktion wäre immer noch ziemlich einfach

add_filter( 'user_has_cap', 'client_admin_cap_filter', 10, 3 );
function client_admin_cap_filter( $allcaps, $cap, $args ){

  $restricted_cap = array( 
    'update_core',
    'manage_options',
    'install_plugins',
    'install_themes',
     // etc.
  );

  foreach( $restricted_cap as $r_cap ){

    // the requested capability and our client user id 
    if ( $r_cap == $args[0] && $args[1] == 2 ) 
      $allcaps[ $cap[0] ] = false;

  } 

  return $allcaps;
}

Wie Sie sehen, ist dies ziemlich effektiv, erfordert keine spezielle Rolle, fügt keine zusätzliche DB-Abfrage hinzu, wird zur Laufzeit ausgeführt und ist leicht skalierbar und wartbar.

Wenn Ihre Logik von einer Rolle abhängt, wünschen wir Ihnen viel Glück, wenn Sie sich an bestimmte Benutzer, Szenarien oder so weiter wenden, ohne sich die Haare auszureißen oder eine Unmenge von Rollen zu erstellen, um mit allen möglichen Anwendungsfällen Schritt zu halten.

Überprüfen Sie den Codex auf weitere Informationen zum Filter user_has_cap .

3
bynicolas

Sie können get_userdata () oder get_user_by () verwenden, indem Sie die Benutzer-ID übergeben. Sie können das Benutzerobjekt abrufen. Von dem bekommst du Rolle.

$user = get_userdata( $user_id );
if(!empty( $user ) && $user){
   $user->roles // this contains the role here check for whatever role you need
}

Sie können diese Antwort für mehr überprüfen

3
bravokeyl