Seite 1 von 1
Themen im Forum sichtbar, jedoch nicht aufrufbar
Verfasst: 08.01.2015 17:46
von Everlong
Hallo,
ich suche die Möglichkeit, das Themen (also die Namen) für Gäste angezeigt werden, jedoch bei einem Klick auf das Thema zum Login/Registrationsmenü weitergeleitet wird.
Bisher habe ich es mit einem Workarround in der php Datei gelöst, frage mich aber ob es nicht auch eine einfacherer Möglichkeit gibt welche ich übersehe.
Re: Themen im Forum sichtbar, jedoch nicht aufrufbar
Verfasst: 08.01.2015 18:29
von MTT
Versuchs mal im ACP
Auf Benutzer und Gruppen klicken
Links auf Gruppenrechte klicken
Gäste wählen
Auf erweiterte Berechtigen klicken,
und da so einstellen wie Du es möchtest
Nie bevorzugen
Nicht vergessen auf "Alle Berechtigungen anwenden" zu klicken.
Und das ganze dann auch unter "Gruppenspezifische Forenrechte"
M.
Re: Themen im Forum sichtbar, jedoch nicht aufrufbar
Verfasst: 08.01.2015 18:58
von gn#36
Das lässt sich denke ich mit einer Extension realisieren, die den Hook in der viewtopic.php nutzt und lediglich kontrolliert, ob der Nutzer Gast ist und wenn ja immer ein Login Formular anbietet.
Ausreichen würde wohl das Event
core.viewtopic_assign_template_vars_before
.
Ich habe jetzt gerade nicht die Zeit, die zu schreiben, aber im Grunde genommen besteht die auch nur aus drei Dateien mit wenig Inhalt: composer.json, config/services.yml und events/main.php. Wenn du dich ein wenig mit PHP auskennst kannst du ja mal probieren, die selbst umzusetzen, anhand z.B.
hiervon.
Ansonsten geht's auch weiterhin mit einer kleinen PHP Code Änderung: Du vergibst das Leserecht für Gäste, aber in der viewtopic.php ersetzt du
Code: Alles auswählen
// Start auth check
if (!$auth->acl_get('f_read', $forum_id))
durch
Code: Alles auswählen
// Start auth check
if (!$auth->acl_get('f_read', $forum_id) || $user->data['user_id'] == ANONYMOUS)
. Dann bekommen Gäste immer das Loginformular zu sehen. Hat natürlich den Nachteil, dass du bei einem Update nicht mehr einfach alles drüberbügeln kannst.
Re: Themen im Forum sichtbar, jedoch nicht aufrufbar
Verfasst: 09.01.2015 15:53
von Everlong
Hallo,
danke für die Antwort.
gn#36 hat geschrieben:Code: Alles auswählen
// Start auth check
if (!$auth->acl_get('f_read', $forum_id) || $user->data['user_id'] == ANONYMOUS)
. Dann bekommen Gäste immer das Loginformular zu sehen.
Ich habe es jetzt so gelöst:
Code: Alles auswählen
if (!$user->data['is_registered'] && $forum_id != 1 && $forum_id != 36 && !$user->data['is_bot'])
Das macht es was es soll, die Gäste können in den beiden Foren (1 und 36) die Themen lesen jedoch in allen anderen Forum nur die Übersicht der Themen sehen.
Re: Themen im Forum sichtbar, jedoch nicht aufrufbar
Verfasst: 09.01.2015 16:26
von gn#36
Damit hast du natürlich die Berechtigung f_read
komplett ausgehebelt im Bezug auf das ansehen von Themen. Heißt also, jeder der die ID des Themas kennt, kann es lesen, es wird nicht zusätzlich noch geprüft ob der User generell in dem Forum lesen dürfte. Somit darf jeder, selbst wenn er die Themenübersicht und das Forum ansich nicht sehen kann, auf das Thema zugreifen, sofern er registriert ist. Da man das auch hinkriegt, indem man die IDs im Link durchprobiert sind damit alle deine Foren für alle registrierten Benutzer zugänglich. Bei Foren ID 1 und 36 besteht überhaupt keine Beschränkung, da darf auch jeder Gast lesen.
Re: Themen im Forum sichtbar, jedoch nicht aufrufbar
Verfasst: 09.01.2015 18:10
von Everlong
gn#36 hat geschrieben:Heißt also, jeder der die ID des Themas kennt, kann es lesen, es wird nicht zusätzlich noch geprüft ob der User generell in dem Forum lesen dürfte. Somit darf jeder, selbst wenn er die Themenübersicht und das Forum ansich nicht sehen kann, auf das Thema zugreifen, sofern er registriert ist.
Das ist auch gewünscht, es handelt sich um ein "Gästeforum" wo jeder unregistrierte Posten und auch die Themen sehen darf, jedoch in den anderen Foren nur die Themen in der Forum Liste einsehen darf jedoch nicht den Inhalt der einzelnen Threads als Gast.
Re: Themen im Forum sichtbar, jedoch nicht aufrufbar
Verfasst: 10.01.2015 01:38
von gn#36
Solange du also absolut keine "internen" Foren z.B. nur für Moderatoren hast ist das ok. Für die gilt nämlich das gleiche. Ich wollte es nur erwähnen, falls das jemand nachmacht.
Re: Themen im Forum sichtbar, jedoch nicht aufrufbar
Verfasst: 10.01.2015 14:21
von Everlong
gn#36 hat geschrieben:Solange du also absolut keine "internen" Foren z.B. nur für Moderatoren hast ist das ok. Für die gilt nämlich das gleiche. Ich wollte es nur erwähnen, falls das jemand nachmacht.
Stimmt, wenn jemand registriert ist und die ForumID vom internen Moderatoren Forum kennt könnte er es sehen. Gar nicht daran gedacht.
Ich werde dann doch mir die Lösung mit "f_read" nochmal anschauen.
Danke fürs nachhaken!
Re: Themen im Forum sichtbar, jedoch nicht aufrufbar
Verfasst: 12.01.2015 19:42
von gn#36
Wenn wir schon
dabei sind, dann kann man auch hierfür eine Extension schreiben (oder es in die bestehende Extension integrieren).
Erstelle einen Ordner gn36/viewtopiclogin im ext Verzeichnis
dort hinein die folgenden Verzeichnisse und Dateien
Code: Alles auswählen
composer.json
config/
services.yml
event/
viewtopic.php
Inhalt der composer.json:
Code: Alles auswählen
{
"name": "gn36/viewtopiclogin",
"type": "phpbb-extension",
"description": "An extension which forces a login form on viewtopic for guests, even if they are allowed to read according to permissions.",
"version": "1.0.0",
"time": "2015-01-12",
"license": "GPL-2.0",
"authors": [
{
"name": "Martin Beckmann",
"role": "Developer"
}
],
"require": {
"php": ">=5.3.3"
},
"extra": {
"display-name": "Force login on Topic View for Guests",
"soft-require" : {
"phpbb/phpbb": ">=3.1.2,<3.2.*@dev"
}
}
}
Inhalt der services.yml (alle Einrückungen mit Leerzeichen!)
Code: Alles auswählen
services:
gn36.viewtopiclogin.listener:
class: gn36\viewtopiclogin\event\viewtopic
arguments:
- @user
tags:
- { name: event.listener }
Inhalt der viewtopic.php
Code: Alles auswählen
namespace gn36\viewtopiclogin\event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class viewtopic implements EventSubscriberInterface
{
protected $user;
__construct(\phpbb\user $user)
{
$this->user = $user;
}
static public function getSubscribedEvents()
{
return array(
// viewtopic
'core.viewtopic_assign_template_vars_before' => 'force_login_guest',
);
}
public function force_login_guest($event)
{
//ggf. hier weitere Ausnahmen ergänzen anhand der Infos in $event (u.a. steht da die Foren ID drin: $event['forum_id'])
if(!$user->data['is_registered'])
{
login_box();
}
}
}
Auch das ist bisher noch nicht getestet.