Hallo Rogi
Der Beitrag ist bereits alt, aber das Problem scheint bei uns noch aktuell zu sein.
Daher wollte ich mal meine Nachforschungen hier kundgeben:
Der Fehler scheint innerhalb des Files: system/modules/news/dca/tl_content.php zu liegen.
Beim Öffnen eines der News-Bilder wird die Methode "CheckPermissions" mit dem GET Parameter act = show ausgeführt.
Innerhalb der Methode scheint jedoch dieser "act" nicht behandelt zu werden.
Daher wird der Standard ausgeführt und dieser besagt, dass $this->checkAccessToElement(Input::get('id'), $root) ausgeführt wird.
Innerhalb dieser Methode wird basierend auf dem 3. Parameter entschieden, welche SELECT Abfrage stattfindet.
Da wir wie oben festgestellt, im Standard-Ablauf sind, wird nun der "falsche" SELECT verwendet.
Somit wird nun die Tabelle tl_content abgefragt, aber mit den IDs aus der tl_news.
Es ist also absolut zufällig, ob ein Eintrag gefunden wird oder nicht da es die falsche Tabelle ist.
Als Workaround kann man innerhalb von checkPermission, im "switch" Statement, einen eigenen Case schaffen:
PHP-Code:
case 'show':
// Check access to the news item
if (!$this->checkAccessToElement(Input::get('id'), $root, true))
{
$this->redirect('contao/main.php?act=error');
}
break;
Dieser muss einfach vor "default:" sein, am besten z.B. nach dem "select" case.
Damit bewirken wir, dass der dritte Parameter true ist und tl_news dadurch abgefragt wird.
Da dies ein relativ hässlicher Weg ist, habe ich das ganze noch in englisch als Issue hinterlegt, damit es bereinigt wird:
https://github.com/contao/core/issues/8625
Gruss Rory