WordPress – Benutzerverwaltung – Anlegen neuer Benutzerrollen

WordPress stellt von Haus aus fünf bzw. sechs Benutzerrollen zur Verfügung. Möchte man zusätzliche Benutzerrollen hinzufügen, findet man hier ein paar Tipps & Beispiele.

Welche Standard-Benutzerrollen stellt WordPress zur Verfügung?

  • Abonnent [subscriber]
  • Mitarbeiter [contributor]
  • Autor [author]
  • Redakteur [editor]
  • Administrator [administrator]
  • Super Administrator [super_admin]

Wie kann man neue Benutzerrollen anlegen?

Das Anlegen von neuen Benutzerrollen ist im Prinzip schon mit Hilfe von wenigen Zeilen Code möglich.
Es wird erst etwas kompliziert bzw. aufwendig, wenn es um die Berechtigungen geht, die der neuen Benutzerrolle zugewiesen werden sollen.
Aber dazu später mehr.

Im ersten Schritt benötigen wir die Funktion add_role().
Diese könnte zum Beispiel in die functions.php des aktuellen Themes eingebunden werden.

HINWEISE
Sobald die Funktion ausgeführt wird, ist die neue Benutzerrolle verfügbar und bleibt auch nach Entfernen des Codes bestehen.
Eine Aktualisierung der zuvor gesetzten Berechtigungen ist mit dieser Funktion nicht möglich.
Das heißt, wenn das Array $capabilities nachträglich aktualisiert bzw. erweitert wird,
bleiben die zurvor gesetzten Berechtigungen unberührt.
In der Datei wp-includes/capabilities.php wird diese Eigenschaft auch noch einmal durch den Hinweis Updates the list of roles, if the role doesn’t already exist. verdeutlicht.

add_role( $role, $display_name, $capabilities );

// Anwendung
add_role( $role, $display_name, $capabilities )
$role [string]
=> Name
Role name
$display_name [string]
=> Anzeigename
Role display name
$capabilities [array]
=> Auflistung der Berechtigungen
List of role capabilities

Wie kann man die Berechtigungen der neuen Benutzerrollen aktualisieren?

Wie bereits beschrieben, kann die Funktion add_role( $role, $display_name, $capabilities ); zur Aktualisierung der Berechtigungen einer bereits vorhandenen Benutzerrolle nicht genutzt werden.
Möchte man also der Benutzerrolle neue Berechtigungen zuweisen oder ausgewählte Berechtigungen entziehen, können folgende Funktionen genutzt werden:

add_cap() :: Berechtigungen hinzufügen

// Beispiel
function add_custom_role_caps() {
$role = get_role( 'custom_role' );
$role->add_cap( 'edit_others_posts' ); 
}
add_action( 'admin_init', 'add_custom_role_caps');

remove_cap() :: Berechtigungen entfernen

// Beispiel
function remove_custom_role_caps() {
$role = get_role( 'custom_role' );
$role->remove_cap( 'edit_others_posts' ); 
}
add_action( 'admin_init', 'remove_custom_role_caps');

Custom Post Types und Benutzerrollen

Im folgenden Abschnitt soll ein Fallbeispiel die Vorteile der individuellen Benutzerrollen beleuchten.

Bei einer Firmenwebsite wurde zur Darstellung der Jobangebote ein Custom Post Type (via Plugin) entwickelt.
Im Backend soll nun ein Benutzer angelegt werden. Dieser soll jedoch nur Zugriff auf die Jobangebote erhalten.
Damit dies möglich ist, muss eine neue Benutzerrolle angelegt werden und die Berechtigungen müssen korrekt gesetzt werden.
Standardmäßig ist es so, dass sich Custom Post Types wie normale Posts bzw. Beiträge verhalten. Somit greifen hier auch die gleichen Berechtigungen.
Das heißt, wenn man zum Beispiel die Berechtigung Code folgt entzieht, können weder „fremde“ Beiträge noch „fremde“ Jobangebote bearbeitet werden.
Also muss noch eine Anpassung vorgenommen werden, sodass nur Berechtigungen in Bezug auf den entsprechenden Custom Post Type gesetzt werden und keine weiteren Berechtigungen vorliegen.
Da der Custom Post Type über ein Plugin bereitgestellt wird, ist es nahe liegend, dass auch die neue Benutzerrolle an die Aktivierung bzw. Deaktivierung des betreffenden Plugins gekoppelt ist.

Bei Aktivierung des Plugins

function add_rule_cako_job_manager() {
add_role(
'cako_job_manager_5',
__( 'Job Manager 5' ),
array(
'read' => true,
)
);
}
register_activation_hook( __FILE__, 'add_rule_cako_job_manager' );

Bei Deaktivierung des Plugins

function remove_rule_cako_job_manager() {
remove_role( 'cako_job_manager_5' );
}
register_deactivation_hook( __FILE__, 'remove_rule_cako_job_manager' );

Wie kann man Benutzerrollen entfernen?

// Anwendung
remove_role( $role )

Der Beitrag ist leider noch nicht ganz fertig. Weitere Infos folgen aber noch.


Weitere Infos unter:
https://codex.wordpress.org/Function_Reference/add_role
https://codex.wordpress.org/Roles_and_Capabilities
https://codex.wordpress.org/Function_Reference/add_cap
https://codex.wordpress.org/Function_Reference/remove_cap
https://developer.wordpress.org/plugins/the-basics/activation-deactivation-hooks/

Schreibe einen Kommentar

* Pflichtfelder