Role-Manager und Organizer
bessere Rechteverwaltung mit dem Role Manager
Der WordPress Role-Manager von Owen Winkler ist in meinen Augen eines der besten Plugins die man im Netz finden kann. Bei Multi-User Weblogs, oder um WordPress als Redaktionssystem für viele Benutzer einzurichten ist es unverzichtbar.
Nicht nur dass man erst mit dem Role-Manager wirklich detailliert festlegen kann, was ein Benutzer darf und was nicht: Man kann neue “Berechtigungen” erstellen, und auch andere Plugins können sich in die Hooks des Role-Managers “einklinken”. Das gibt dem Admin die Möglichkeit genau festzulegen welcher Benutzer die Funktionen eines Plugins auch nutzen darf und wer eben nicht.
andere Plugins mit Berechtigungen: Organizer
Verzeichnisansicht
Ein Paradebeispiel ist zum Beispiel der Organizer von Imthi Rafiq. Der in meinen Augen beste Upload-Manager für WordPress gibt einem eine ganze Reihe von Möglichkeiten Dateien zu verwalten, hochzuladen, zu kopieren, umzubenennen, Verzeichnisse zu durchstöbern, etc.
Als Besonderheit, lassen sich die einzelnen Funktionen eben auch im Role-Manager den verschiedenen Profilen zuweisen bzw. verbieten. Vielseitig lassen sich auch die Einstellungen einzelner Benutzer vorgeben: so kann der Admin zum Beispiel die maximale Dateigröße für Uplaods für jeden Nutzer individuell festlegen. Wer sein Wordpress-Upload-Verzeichnis zB. auf “/” statt auf “/bilder/uploads” festlegt, gibt den Benutzern einen (wenn auch in Grenzen) brauchbaren Ersatz für einen echten FTP-Benutzer zur Hand. Die Einstellung “/” für Uploads bewirkt, dass ein Benutzer des Organizers auf alle Verzeichnisse zugreifen kann. Also Vorsicht mit dieser Einstellung, das ist wirklich nur sinnvoll, wenn die Benutzer wissen was sie tun (man könnte theoretisch Themes löschen, die Datenbank-Zugangsdaten auslesen).
Genau da kommt aber wieder der Role-Manager ins Spiel, der gewisse Aufgaben verbieten kann. Alternativ lässt sich im Organizer auch für jeden Benutzer sein “eigenes Unterverzeichnis” vergeben. Das verhindert zum einen dass Benutzer in anderen Verzeichnissen Schaden anrichten können. Desweiteren ist das super praktisch um Ordnung zu wahren. Man stelle sich vor 20 Benutzer könnten auf die Daten anderer Nutzer zugreifen, bearbeiten, etc. Überdies erstellt das Plugin die Benutzer-Unterordner selbst, automatisch also. Man braucht sich um nichts zu kümmern und kann sogar festlegen wie groß Verzeichnisse (individeuell für jeden Benutzer) maximal werden dürfen.
In meinen Augen viel sinniger als das WordPress default-Verhalten, welches entweder alle Uploads in ein einziges Verzeichnis packt beziehungsweise sie höchstens nach Monaten und Jahren sortiert in Unterverzeichnissen ablegt. Auf Multi-User-Weblogs nimmt das nämlich gar keine Rücksicht. Alle Uploads aller Nutzer landen in dieser Ordnerstruktur, was schnell zum Chaos führen dürfte wenn es viele Uplaods gibt.
Übersetzungen
Für beide Plugins habe ich Übersetzungen angefertigt, die auch in den .zip-Dateien enthalten sind.
Da WordPress, eine detaillierte Rechteverwaltung von Haus aus nicht vorsieht, gibt es für die einzelnen Berechtigungen auch keine Übersetzten Begriffe. Man sieht also auf der Role-Manager Seite so Begriffe wie: “Manage Posts”. Im Grunde sind diese ja auch verständlich, aber auch Owen Winkler kommentiert die Art wie er die Berechtigungen angezeigt mit “this is crap”… Leider greifen hier die Übersetzungsdateien (die .mo-Dateien) nicht, denn die Bezeichnungen macht jedes Plugin wie auch Wordpress selbst. Da sie aus der Datenbank kommen und viele Funktionen im Backend auf diese Bezeichnungen zugreifen, kann man sie nicht einfach umbenennen.
Um einem Admin trotzdem verständliche oder übersetzte Bezeichnungen auch für die Capabilities, (so heißen die Berechtigungen intern bzw. auf engl.) anzuzeigen, hier meine “quick and dirty” Lösung.
Für jede Capability packt man die gewünschte Bezeichnung in eine Textdatei. Je nach installierten Plugins und verfügbaren Capabilities muss man die Textdatei erweitern. In meinem Fall sieht sie zB. so aus.
switch_themes,Design wechseln
edit_themes,Design bearbeiten
activate_plugins,Plugin aktivieren
edit_plugins,Plugin bearbeiten
edit_users,Benutzer bearbeiten
edit_files,Dateien bearbeiten
manage_options,Einstellungen ändern
moderate_comments,Kommentare moderieren
manage_categories,Kategorien verwalten
manage_links,Links verwalten
upload_files,Dateien hochladen
import,Daten importieren
unfiltered_html,ungefiltertes HTML
edit_posts,Beiträge bearbeiten
edit_others_posts,fremde Beiträge bearbeiten
edit_published_posts,veröffentlichte Beiträge bearbeiten
publish_posts,Beiträge veröffentlichen
edit_pages,statische Seiten bearbeiten
read,Beiträge lesen
Organizer,Dateibrowser
Organizer Copy,Dateien kopieren
Organizer Delete,Dateien löschen
Organizer Directory,Verzeichnisse verwalten
Organizer Option,Dateimanager Benutzeroptionen
Organizer Rename,Dateien umbenennen
Organizer Resize,Bilder vergrößern/verkleinern
Organizer Upload,Hochladen mit dem Dateibrowser
Diese Textdatei habe ich dann als cap_names.txt unter /wp-admin/ abgelegt. Die Übersetzungen kann man natürlich auch noch etwas ausführlicher und treffender ausformulieren.
Nun muss man dem Role-Manager nur noch sagen wo er die Beschreibungen findet. Man sucht in der role-manager.php in Zeile 614 die Funktion get_cap_name():
//this is crap
function get_cap_name($cap) {
return ucwords(str_replace('_', ' ', $cap));
}
und ersetzt sie einfach mit:
// this is crap too - but at least it works for me
function get_cap_name($cap) {
$cap_names = file('cap_names.txt');
foreach ($cap_names as $value) {
$parts = explode(",", $value, 2);
$capname = $parts[0];
$capnicename = $parts[1];
if ($capname == $cap) { return htmlentities($capnicename); }
}
}
Zuletzt noch das Stylesheet des Role-Managers (in Zeile 50) anpassen:
form.cap_form, label.cap-label, form.userlevel_form {
display: block;
/*float: left;
width: 15em;
height: 2.5em;*/
margin-bottom: auto;
}
übersetzte Rechte
Damit wird die Seite zwar länger, aber man hat Platz, detailliert zu sagen wofür eine bestimmte Berechtigung da ist - und das immerhin in der Sprache, die der Admin versteht…
Umständlich, außerhalb jeder WordPress-Logik, und hartkodierte Bezeichnungen sind sicher reichlich döööörtieeee, aber schnell gemacht und effektiv. ;)
Vielen Dank für den klasse Tipp! Diese beiden Plugins kannte ich noch leider nicht. Sie könne mir jedenfalls ungemein helfen. Sind wirklich einer der besten Plugins, die es für Wordpress gibt.
nix zu danken, ich hätte noch die ein oder andere Änderung an den Plugins parat (zB. Edit-Links zu editierbaren Dateien, Syntax-Highlighting für den eingebauten Editor, sortierte Verzeichnisse im Organizer, etc. etc…), aber dann könnt ich gleich die nächste Version eines fremden Plugins ankündigen…
… und das will ich mir dann doch nicht anmaßen - zumal Imthi zB. in den nächsten Tagen mit den arbeiten am Nachfolger vom Organizer beginnt. gruß
Ichj finde das Plugin “Role Manager” auch super. Ich habe nur leider ein Problem damit. Ich habe ein Plugin namens “Calendar” installiert. Dieses kann vom Admin unter “Einstellungen” – > “Calendar” verwendet werden. Ich möchte dieses aber auch den Herausgebern zur Verfügung stellen. Leider weiß ich nicht, wie ich es mit dem “Role Manager” hinbekomme. Freigabe von “Einstellungen” funktioniert leider nicht und geht mir eigentlich auch zu weit.
Gibt es eine Möglichkeit, dieses spezielle Recht zu erstellen?
Natürlich! Du kannst auf der Role-Manager-Seite im Admin Control Panel nämlich auch eigene “Capabilities” erstellen. Dafür gibt es am Ende ein Textfeld. Du gibst einen Namen ein, also zB. “meine_neue_capability” und speicherst diese.
Nun gibt es diesen Wert schon einmal, dh. er steht dir im gesamten WordPress-Backend zur Verfügung. Willst du nun bestimmten Benutzern eine Funktion genehmigen, dann kannst du mit
<?php if ($user->has_cap('meine_neue_capability')) ?>abfragen, ob dem aktuellen Autor/Benutzer die Berechtigung erteilt wurde, oder eben nicht.
Bleibt noch anzumerken, dass meine oben beschriebene, umständliche Methode, die Capabilities zu übersetzen, bei einer auf diese Weise hinzugefügten Berechtigung erst dann wieder funktioniert, wenn man in die capnames.txt zB. die Zeile
meine_neue_capability, Eine neue Berechtigung - rein zu TestzweckenhineinschreibtHallo Erik,
Du schreibst:
Genau diese Funktion würde ich sehr gerne nutzen. Auf der Suche nach einem solchen Plugin bin ich auch auf Deine Seite gestoßen. Ich kann zwar die Größe der Dateien festlegen, aber die Dateien landen immer im normalen
/uploads/Ordner. Zwar wurde ein Unterordner/uploads/Username/erstellt, aber er bleibt leer. Hast Du die Funktionalität mal getestet? Würde mich sehr über Hilfe freuen! Funktioniert es bei Dir?Ich habe leider auch auf der Autorenseite keine Hilfe gefunden!
Danke, lu
Jawoll! Die Funktion ist getestet und implementiert, das hatte Imthi damals auf meinen Wunsch hin extremst flott nachgerüstet, aller Dank gebührt ihm. Aber jetzt erstmal zur Einrichtung. Du aktivierst das Plugin, wechselst im Adminbereich unter Organizer » Users. Dort siehst du im oberen Bereich die Einstellungen im unteren eine Liste aller registrierten Benutzer. In dieser Liste kannst du nun auf Edit/Bearbeiten klicken, damit siehst du nun im obereb Bereich die exakten Einstellungen für den jeweiligen Autor. Für diesen kannst du jetzt im select-Feld Verzeichnis für diesen Benutzer/User-Directory von Common (damit ist das Standardmäßige WordPress-Uploadverzeichnis gemeint) auf “User Specific” stellen.
Nun sollten die Uploads dieses Benutzers (die er mit dem Organizer hochlädt) im Verzeichnis zB. /wp-content/admin/ landen bzw. /wp-content/benutzername/
Einziges Szenario, wo das nicht klappt sind shared hosts wo PHP im safe-mode läuft. Dafür habe ich aber auch einen dirty-hack. Gib bescheid obs klappt. :)
PS: Owen Winklers Role Manager, von dem in meinem Artikel hier auch die Rede ist, wird (von ihm) nicht mehr weiterentwickelt. Für WordPress-Versionen der 2.1er Reihe und aufwärts gibt es aber einen Landsmann, ders weiterentwickelt: für den Fall: klick.