TechBlog: T3Blog: Zugriffsschutz bei mehreren Autoren

Die Extension T3Blog eignet sich sehr gut, um mit mehreren Autoren ein Blog zu schreiben. Leider fehlt zur Zeit die Möglichkeit, den Zugriff der Autoren auf Posts einzuschränken - Editieren und Löschen der Einträge von Anderen ist somit leider problemlos möglich. Durch Ändern der Source-Dateien lässt sich jedoch schnell Abhilfe schaffen.

Auflistung der Beiträge

In der Auflistung der Posts sind hinter jedem Eintrag Buttons zum Freischalten, Bearbeiten etc. vorhanden. Diese wollen wir nun ausblenden, falls es sich bei dem aktuellen Backend-User weder um den Autor des Eintrags noch um einen Admin-User handelt. Dazu sind in der Datei "typo3conf/ext/t3blog/mod2/index.php" folgende Änderungen nötig:

  1. --- typo3conf/ext/t3blog/mod2/index.php 2009-07-19 17:46:48.000000000 +0200
  2. +++ typo3conf/ext/t3blog/mod2/index.php 2009-07-19 17:58:27.000000000 +0200
  3. @@ -164,6 +164,19 @@
  4.    * @return   Function bar
  5.    */
  6.   function getFunctions($table,$row){
  7. +    ## HACK: Hide Buttons, if user is not author or admin
  8. +
  9. +    $blog_post = $GLOBALS['TYPO3_DB']->sql_fetch_assoc (
  10. +      $GLOBALS['TYPO3_DB']->exec_SELECTquery (
  11.  
  12. +        'cruser_id',
  13.  
  14. +        'tx_t3blog_post',
  15.  
  16. +        'uid=' . $row['uid'],
  17.  
  18. +        '',
  19.  
  20. +        '',
  21.  
  22. +        '1'));
  23. +
  24. +    if ($blog_post['cruser_id']==$GLOBALS["BE_USER"]->user['uid'] || $GLOBALS["BE_USER"]->user['admin']) {
  25. +
  26.     // "Edit" link:
  27.    $params = '&edit['.$table.']['.$row['uid'].']=edit';
  28.    $cells .= '<a href="#" onclick="'.htmlspecialchars(t3lib_BEfunc::editOnClick($params,$this->doc->backPath)).'">'.
  29. @@ -199,6 +212,7 @@
  30.      '<img'.t3lib_iconWorks::skinImg($this->doc->backPath, t3lib_extMgm::extRelPath('t3blog').'icons/magnifier.png','width="16" height="16"').' title="Preview" alt="Preview" />'.
  31.     '</a>';
  32.  
  33. +    }
  34.    return $cells;
  35.   }
  36.  

Auflistung der Kommentare

Soll auch verhindert werden, dass ein fremder Backend-User Kommentare bearbeiten kann, so muss auch die Datei "typo3conf/ext/t3blog/mod3/index.php" editiert werden:

  1. --- typo3conf/ext/t3blog/mod3/index.php 2009-03-06 17:39:00.000000000 +0100
  2. +++ typo3conf/ext/t3blog/mod3/index.php 2009-07-19 19:09:00.000000000 +0200
  3. @@ -145,6 +145,19 @@
  4.  
  5.    global $LANG, $SENDERMAIL;
  6.      
  7. +    ## HACK: Hide Buttons, if user is not author or admin
  8. +
  9. +    $blog_post = $GLOBALS['TYPO3_DB']->sql_fetch_assoc (
  10. +      $GLOBALS['TYPO3_DB']->exec_SELECTquery (
  11.  
  12. +        'cruser_id',
  13.  
  14. +        'tx_t3blog_post',
  15.  
  16. +        'uid=' . $row['uid'],
  17.  
  18. +        '',
  19.  
  20. +        '',
  21.  
  22. +        '1'));
  23. +
  24. +    if ($blog_post['cruser_id']==$GLOBALS["BE_USER"]->user['uid'] || $GLOBALS["BE_USER"]->user['admin']) {
  25. +
  26.    // "Edit" link: ( Only if permissions to edit the page-record of the content of the parent page ($this->id)
  27.    $params  =  '&edit['. $table. ']['. $row['uid']. ']=edit';  
  28.    $cells .=    '<a href="#" onclick="'.htmlspecialchars(t3lib_BEfunc::editOnClick($params, $this->doc->backPath)).'">'.
  29. @@ -281,6 +294,7 @@
  30.     $cells .=  $this->makeCells($params, 'flag_green.png', 'Mark as spam', 'Spam');
  31.    }
  32.    
  33. +    }
  34.    return $cells;
  35.   }
  36.   
  37. @@ -574,4 +588,4 @@
  38.  
  39.  $SOBE->main();
  40.  $SOBE->printContent();
  41.  

Da in der $row-Variable offenbar das Tabellen-Field cruser_id nicht vorhanden ist, ist der DB-Request nötig. Man könnte auch an anderer Stelle die zu holenden Fields ändern, allerdings wollte ich die zu ändernden Stellen im Code minimieren. Es bleibt zu hoffen, dass die Userrechte in einer nächsten Version von T3Blog so erweitert werden, dass die beschriebene Modifizierung nicht mehr nötig ist.

Es sei gesagt, dass hiermit noch nicht verhindert wird, dass die Posts durch einen direkten Aufruf editiert werden - wir lassen lediglich die Buttons dazu verschwinden. (Fortsetzung folgt also...)

Lina Ourima
17.11.2009
Vorschlag zur schöneren Anzeige

Wenn man bei der Listung der Kommentare am Ende

return $cells;
} else {
return ' ';
}
Statt

}
return $cells;
schreibt, erhällt man kein leeres Tabellenfeld (deren Ränder nicht angezeigt werden) sondern eine mit einem leerzeichen gefüllte Tabelle. Alternativ könnte man hier auch einen Hinweis unterbringen, dass das entsprechende Feld nicht editiert werden kann.

Vielen Dank für die gute Arbeit.

Lina

Felix Nagel
26.07.2010
Ins Forge damit?

Wurde dieser Patch schon im Forge geposted? Wäre schön wenn das eingebaut werden würde.

http://forge.typo3.org/projects/extension-t3blog/issues

Zur Zeit poste ich da eine Menge Verbesserungen. Unter anderem einen funktionsfähigen Trackback inklusive neuem Modul zum freischalten.
Wäre schön wenn wir gemeinsam ein paar Bugs killen und Features einbringen könnten :-)

Johannes
28.07.2010
RE: Ins Forge damit?

Hi,
im Forge habe ich noch nichts gepostet. Leider bin ich im Moment total eingespannt... Wenn du möchtest und Zeit hast, kannst du aber gerne meinen Vorschlag posten. Werde ab und zu im Forge vorbeischauen und sehen, was sich entwickelt. Im Prinzip müssten die Leute von T3Blog aber noch etwas mehr Arbeit als ich reinstecken und einen richtigen Zugriffsschutz einbauen, denn mein Fix blendet ja nur die Buttons aus.

Viele Grüße,
Johannes

  •  
  • Kommentar schreiben
  •  
Ich möchte über jeden weiteren Kommentar in diesem Post benachrichtigt werden.