Spaß mit WP-CLI – heute: Benutzerrollen vergleichen

This article was released in English language as well: Compare user roles in a multisite with WP-CLI

In einem größeren WordPress-Netzwerk welches wir betreuen haben sich scheinbar Inkonsistenzen bei den Capabilities einer Benutzerrolle zwischen den verschiedenen Sites eingeschlichen. (Fragt nicht!) So zumindest die Vermutung, denn der Nutzer darf Dinge hie tun, die er da nicht darf, obwohl er in beiden Blogs die gleiche (benutzerdefinierte) Rolle hat.

Als Freund der Konsole ist WP-CLI das Werkzeug der Wahl um einen Vergleich zweier Rollen zu machen. Der entsprechende Befehl lautet wp cap list:

$ diff -y <(wp cap list 'moderator' --url=site1.example.tld | sort) <(wp cap list 'moderator' --url=site2.example.tld | sort)

Zur Erläuterung: diff ist ein Unix-Programm das Textdateien Zeile für Zeile vergleicht. <() ist ein Bash-Feature mit dem man die Textdatei umgeht und nennt sich Process Substitution. Die Listen der Capabilities werden vor dem Vergleich noch mit sort sortiert.

Die Capabilities werden dann in zwei Spalten gegenüber gestellt (das bewirkt der Parameter -y):

add_polls							add_polls
add_users							add_users
create_users						create_users
delete_others_posts					delete_others_posts
delete_posts						delete_posts
delete_private_posts				delete_private_posts
delete published posts				<
delete_published_posts				<
delete_users						delete_users
edit_others_posts					edit_others_posts
edit_posts							edit_posts
edit_private_posts					edit_private_posts
edit_published_posts				edit_published_posts
edit_user							edit_user
edit_users							edit_users
list_users							list_users
manage_categories					manage_categories
manage_network_users				manage_network_users
manage_polls						manage_polls
moderate_comments					<
promote_users						promote_users
publish_posts						<
read								read
read_private_pages					read_private_pages
read_private_posts					read_private_posts
remove_users						remove_users
upload_files						upload_files

Die linke Spalte zeigt die Capabilites in site1.example.tld, rechts stehen die aus site2.example.tld. In site2 fehlen also 4 Capabilities. Wer an das Format der Git diffs gewöhnt ist, verwendet den Parameter u anstatt y:

$ diff -u <(wp cap list 'moderator' --url=site1.example.tld | sort) <(wp cap list 'moderator' --url=site2.example.tld | sort)

Das Ergebnis liest man aus Sicht der »Datei« die man diff als zweites übergeben hat. D.h. - steht für eine fehlende Zeile in der 2. Datei, + eine fehlende Zeile in der 1. Datei.

--- /tmp/sh-np-1654299763	2015-03-06 12:28:07.000000000 +0100
+++ /tmp/sh-np-2446118198	2015-03-06 12:28:07.000000000 +0100
@@ -5,8 +5,6 @@
 delete_others_posts
 delete_posts
 delete_private_posts
-delete published posts
-delete_published_posts
 delete_users
 edit_others_posts
 edit_posts
@@ -18,9 +16,7 @@
 manage_categories
 manage_network_users
 manage_polls
-moderate_comments
 promote_users
-publish_posts
 read
 read_private_pages
 read_private_posts

Kommentare

Es wurden noch keine Kommentarte zu diesem Artikel geschrieben.

Fragen, Ideen oder Kritik? – Hier ist Platz dafür!

Dein Kommentar

Um ein Kommentar abzugeben, reicht der Text im Kommentarfeld. Die Angabe eines Namens wäre nett, ist aber nicht erforderlich.

Du darfst folgenden HTML-Code verwenden, musst aber nicht:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>