Hi,
ich stand mal vor dem gleichen Problem. Direkt scheint es nicht zu funktionieren, weshalb vllt mal ein Feature Request gemacht werden sollte, damit man die Rechte pro Ordner definieren kann.
Leider scheinen im DC_File/DC_Folder nicht alle Callbacks zu funktionieren, wie es bei der DC_Table der Fall ist.
Ich habe daher die tl_files wie folgt erweitert:
PHP-Code:
$GLOBALS['TL_DCA']['tl_files']['config']['onload_callback'][] = array('meineKlasse', 'checkPermission');
$GLOBALS['TL_DCA']['tl_files']['list']['operations']['edit']['button_callback'] = array('meineKlasse', 'editFile');
$GLOBALS['TL_DCA']['tl_files']['list']['operations']['cut']['button_callback'] = array('meineKlasse', 'cutFile');
$GLOBALS['TL_DCA']['tl_files']['list']['operations']['delete']['button_callback'] = array('meineKlasse', 'deleteFile');
class meineKlasse extends Backend
{
public function checkPermission()
{
if ($this->User->isAdmin)
{
return;
}
if (Input::get('act') == 'edit' && $this->isPublicDir(Input::get('id')))
{
Message::addError('No permissions to manipulate public files!');
\Controller::redirect($this->getReferer());
}
if (Input::get('act') == 'delete' && $this->isPublicDir(Input::get('id')))
{
Message::addError('No permissions to delete public files!');
\Controller::redirect($this->getReferer());
}
if (Input::get('act') == 'paste' && Input::get('mode') == 'cut' && $this->isPublicDir(Input::get('id')))
{
Message::addError('No permissions to move public files!');
\Controller::redirect($this->getReferer());
}
if (Input::get('act') == 'move' && Input::get('mode') == 2 && $this->isPublicDir(Input::get('pid')))
{
Message::addError('No permissions to create files in public directories!');
\Controller::redirect($this->getReferer());
}
if (Input::get('act') == 'cut' && Input::get('mode') == 2 && $this->isPublicDir(Input::get('pid')))
{
Message::addError('No permissions to move files into public directories!');
\Controller::redirect($this->getReferer());
}
if (Input::get('act') == 'copy' && Input::get('mode') == 2 && $this->isPublicDir(Input::get('pid')))
{
Message::addError('No permissions to copy files into public directories!');
\Controller::redirect($this->getReferer());
}
}
public function editFile($row, $href, $label, $title, $icon, $attributes)
{
return ($this->User->isAdmin || ($this->User->hasAccess('f2', 'fop') && !$this->isPublicDir($row['id']))) ? '<a href="'.$this->addToUrl($href.'&id='.$row['id']).'" title="'.specialchars($title).'"'.$attributes.'>'.Image::getHtml($icon, $label).'</a> ' : Image::getHtml(preg_replace('/\.gif$/i', '_.gif', $icon)).' ';
}
public function deleteFile($row, $href, $label, $title, $icon, $attributes)
{
if (is_dir(TL_ROOT . '/' . $row['id']) && count(scan(TL_ROOT . '/' . $row['id'])) > 0) //folder
{
return ($this->User->isAdmin || ($this->User->hasAccess('f4', 'fop') && !$this->isPublicDir($row['id']))) ? '<a href="'.$this->addToUrl($href.'&id='.$row['id']).'" title="'.specialchars($title).'"'.$attributes.'>'.Image::getHtml($icon, $label).'</a> ' : Image::getHtml(preg_replace('/\.gif$/i', '_.gif', $icon)).' ';
}
else
{
return ($this->User->isAdmin || (!$this->isPublicDir($row['id']) && ($this->User->hasAccess('f3', 'fop') || $this->User->hasAccess('f4', 'fop')))) ? '<a href="'.$this->addToUrl($href.'&id='.$row['id']).'" title="'.specialchars($title).'"'.$attributes.'>'.Image::getHtml($icon, $label).'</a> ' : Image::getHtml(preg_replace('/\.gif$/i', '_.gif', $icon)).' ';
}
}
public function cutFile($row, $href, $label, $title, $icon, $attributes)
{
return ($this->User->isAdmin || ($this->User->hasAccess('f2', 'fop') && !$this->isPublicDir($row['id']))) ? '<a href="'.$this->addToUrl($href.'&id='.$row['id']).'" title="'.specialchars($title).'"'.$attributes.'>'.Image::getHtml($icon, $label).'</a> ' : Image::getHtml(preg_replace('/\.gif$/i', '_.gif', $icon)).' ';
}
public function isPublicDir($path)
{
$strPublicFolder = 'files/project/public'; //public folder
$intPublicFolder = strlen($strPublicFolder);
if( substr($path, 0, $intPublicFolder) == $strPublicFolder )
{
return true;
}
return false;
}
}
Lesezeichen