6.2. Benutzerrechte

Vielleicht ist es Ihnen ja schon einmal passiert: Sie wollen die WordPress-Administrationsoberfläche von WordPress aufrufen, sind aber nicht als Administrator angemeldet. WordPress wird Ihnen folgende Meldung auf Ihrem Bildschirm anzeigen:

Abb. 5.2: Sie verfügen nicht über die erforderlichen Rechte um diese Seite zu sehen.
Abb. 5.2: Sie verfügen nicht über die erforderlichen Rechte um diese Seite zu sehen.

Und das ist gut so. Denn um sicher zu gehen, dass niemand an Ressourcen gelangt, deren Nutzung nur mit eingeschränkten Rechten möglich wäre, macht WordPress ausgiebig gebrauch von der Funktion current_user_can().

<?php
function current_user_can( $capability ) {
	...
}
?>

Dabei gilt:

You’re not allowed to see this content. Please log in first.

Capabilities

Capabilities (zu Deutsch etwa: Möglichkeiten, Fähigkeiten oder Befähigungen) sind die einzelnen Rechte. Da die Liste sehr lang ist, werde ich hier nicht alle auflisten und stattdessen auf den Codex von WordPress verweisen: https://codex.wordpress.org/Roles_and_Capabilities#Capabilities.

Hier einige Beispiele:

You’re not allowed to see this content. Please log in first.

Weitere Überprüfungsfunktionen

current_user_can_for_blog()

Überprüft ob der aktive Benutzer ein bestimmtes Benutzerrecht für einen bestimmten Blog besitzt.

<?php
function current_user_can_for_blog( $blog_id, $capability ) {
	...
}
?>

Dabei gilt:

  • $blog_id (int)
    Die ID des Blogs.
  • $capability (string)
    Name (String) des Rechtes, auf die überprüft werden soll.

Auch diese Funktion kann weitere Parameter aufnehmen. Zum Beispiel zur Übergabe weiterer Parameter:

<?php
function current_user_can_for_blog( $blog_id, $capability, $args ) {
	...
}
?>

author_can

Überprüft ob ein Autor eines Artikels ein bestimmtes Recht hat.

<?php
function author_can( $post, $capability ) {
	...
}
?>

Dabei gilt:

  • $post (int|object)
    Das Post-Objekt (WP_Post) (der auch den Autor enthält).
  • $capability (string)
    Name (String) des Rechtes, auf die überprüft werden soll.

Auch diese Funktion kann weitere Parameter aufnehmen. Zum Beispiel zur Übergabe weiterer Parameter:

<?php
function author_can( $post, $capability, $args ) {
	...
}
?>

user_can

Überprüft ob ein Benutzer ein bestimmtes Benutzerrecht besitzt.

<?php
function user_can( $user, $capability ) {
	...
}
?>

Dabei gilt:

  • $user (int|object)
    Das Benutzer-Objekt (WP_User) oder die Benutzer-ID.
  • $capability (string)
    Name (String) des Rechtes, auf die überprüft werden soll.

Auch diese Funktion kann weitere Parameter aufnehmen. Zum Beispiel zur Übergabe weiterer Parameter:

<?php
function user_can( $user, $capability, $args ) {
	...
}
?>

map_meta_cap

WordPress arbeitet mit zwei unterschiedliche Typen von Capabilities. Zum einen mit Rollen und zum zweiten mit so genannten Meta Capabilities.

Wie Sie nun wissen werden Capabilities immer auch auch zu einer Rolle hinzugefügt. So darf z.B. ein Contributor (dt. Mitarbeiter) keine Dateien hochladen. Ein Benutzer mit der Rolle Autor jedoch schon.

Meta capabilities hingegen sind Rechte die zu einem Objekt hinzugefügt werden (z.B. zu einem Benutzer oder zu einem Artikel).

Beispielsweise existiert auch der Fall, dass mehrere Autoren das Recht haben, Artikel zu bearbeiten. Autor A darf aber nicht den Artikel von Autor B bearbeiten und umgekehrt. Wenn also ein Autor den Beitrag des jeweils anderen bearbeiten will, wird map_meta_cap() herangezogen. Es „mapped“ sozusagen die zurückgegebenen Rechte des Objekts hin zu den eigentlichen Capabilities, die dann z.B. mittels current_user_can() überprüft werden können.

<?php
function map_meta_cap( $cap, $user_id ) {
	...
}
?>

Dabei gilt:

You’re not allowed to see this content. Please log in first.

is_super_admin

Mit Einführung der Netzwerkfähigkeit von WordPress wurde es auch nötig, überprüfen zu können, ob der vorliegende Benutzer ein so genannter „Super-Admin“ ist. Damit ist ein Administrator gemeint, der nicht nur Zugriff auf den gerade vorliegende Seite/Blog hat, sondern auch auf die übergeordnete Netzwerkseite.

<?php
function is_super_admin( $user_id = false ) {
	...
}
?>

Es gilt:

You’re not allowed to see this content. Please log in first.

Neue Benutzerrechte erstellen

Neue Benutzerrechte (Capabilities) können in WordPress zu Rollen (Sie erfahren im nächsten Kapitel mehr darüber) aber auch zu einem Benutzer hinzugefügt werden.

Da neue Rechte direkt in die Datenbank gespeichert werden, sollten Sie darauf achten, dass die nachfolgenden Codezeilen jeweils nur einmalig ausgeführt werden (z.B. beim Aktivieren des Plugins):

You’re not allowed to see this content. Please log in first.

Benutzerrechte entfernen

Hier wenden Sie die Methode remove_cap() der Klasse WP_Role an:

<?php
function remove_cap( $cap ) {
	...
}
?>

Es gilt:

  • $cap (string)
    Der Name der Capability.

Die Methode hat keinen Rückgabewert.

Beispiel zum Entfernen von Rechten einer Rolle

<?php

register_deactivation_hook( __FILE__, 'mm_remove_capability' );

function mm_remove_capability() {
	$role = get_role( 'configurator' );

	if ( is_a( $role, 'WP_Role' ) ) {
		$role->remove_cap( 'can_edit_mm_settings' );
	}

}
?>

Auf Github ansehen

Beispiel zum Entfernen von Rechten eines Benutzers

<?php

register_deactivation_hook( __FILE__, 'mm_remove_user_capability' );

function mm_remove_user_capability() {
	$user = get_user_by( 'id', 1 );

	if ( is_a( $user, 'WP_User' ) ) {
		$user->remove_cap( 'can_edit_mm_settings' );
	}

}
?>

Auf Github ansehen