Profil einer Gruppe unaufrufbar machen
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Profil einer Gruppe unaufrufbar machen
Hallo,
meine Aufgabenstellung ist, das Profil der Mitglieder einer bestimmten Gruppe (group_id = 21) für alle Mitglieder (außer Admins und natürlich jeweils das eigene Profil) nicht aufrufbar zu machen. Die fraglichen Mitglieder sind immer nur in dieser einen Gruppe. Für den umgekehrten Weg (diese User dürfen keine anderen Profile sehen) gibt es ja ein Recht, allerdings auch nur global - nützt aber hier nichts.
Der erste Ansatz war, bei den Usern der Gruppe 21 den Link unter dem Usernamen wegzunehmen - dazu müsste man in einigen Templates eine UND-Verknüpfung von postrow.U_PROFILE mit einer zu definierenden Variablen in der Art S_GROUP_ID vornehmen. Die Versuche in dieser Richtung habe ich allerdings mangels Erfolg abbrechen müssen; es wäre auch nur eine Teillösung, da man mit Kenntnis der user_id den Link ja händisch eingeben könnte und so auf das Profil zugreifen könnte.
Mein nächster Ansatz wäre die php-Datei, in der der Link zum Userprofil erzeugt wird. Bei deaktivierten Usern springt phpbb zwar zum Profil, gibt dann aber aus, dass der User nicht existiert. Wenn ich ein gleiches Verhalten für die group_id 21 erreichen könnte, wäre ich schon zufrieden, optimal wäre eine modifizierte Meldung in der Art "Du bist nicht berechtigt, dieses Profil zu betrachten".
Gefunden habe ich in includes\functions_content.php die Funktion get_username_string, die mir ein praktikabler Ansatzpunkt zu sein scheint, aber für eine Lösung fehlt mir die ausreichende php-Kenntnis, außerdem müsste der Funktion auch irgendwie die group_id übergeben werden.
Für eine Hilfestellung wäre ich sehr dankbar.
meine Aufgabenstellung ist, das Profil der Mitglieder einer bestimmten Gruppe (group_id = 21) für alle Mitglieder (außer Admins und natürlich jeweils das eigene Profil) nicht aufrufbar zu machen. Die fraglichen Mitglieder sind immer nur in dieser einen Gruppe. Für den umgekehrten Weg (diese User dürfen keine anderen Profile sehen) gibt es ja ein Recht, allerdings auch nur global - nützt aber hier nichts.
Der erste Ansatz war, bei den Usern der Gruppe 21 den Link unter dem Usernamen wegzunehmen - dazu müsste man in einigen Templates eine UND-Verknüpfung von postrow.U_PROFILE mit einer zu definierenden Variablen in der Art S_GROUP_ID vornehmen. Die Versuche in dieser Richtung habe ich allerdings mangels Erfolg abbrechen müssen; es wäre auch nur eine Teillösung, da man mit Kenntnis der user_id den Link ja händisch eingeben könnte und so auf das Profil zugreifen könnte.
Mein nächster Ansatz wäre die php-Datei, in der der Link zum Userprofil erzeugt wird. Bei deaktivierten Usern springt phpbb zwar zum Profil, gibt dann aber aus, dass der User nicht existiert. Wenn ich ein gleiches Verhalten für die group_id 21 erreichen könnte, wäre ich schon zufrieden, optimal wäre eine modifizierte Meldung in der Art "Du bist nicht berechtigt, dieses Profil zu betrachten".
Gefunden habe ich in includes\functions_content.php die Funktion get_username_string, die mir ein praktikabler Ansatzpunkt zu sein scheint, aber für eine Lösung fehlt mir die ausreichende php-Kenntnis, außerdem müsste der Funktion auch irgendwie die group_id übergeben werden.
Für eine Hilfestellung wäre ich sehr dankbar.
- Rare Essence
- Mitglied
- Beiträge: 159
- Registriert: 16.09.2012 00:45
Re: Profil einer Gruppe unaufrufbar machen
Bei einem kurzen Test scheint diese kleine Änderung deinen Wünschen zu entsprechen. Es ist aber zwingend erforderlich, daß in der Tabelle users in der Spalte group_id die 21 steht für die Mitglieder, die Mitglied dieser Gruppe sind. Gruppe 21 sollte also die Hauptgruppe dieser User sein.
In der root/memberlist.php finde
Direkt dahinter ergänze in einer neuen Zeile
Die Gruppen-ID für die Admingruppe ist hier 5 (ggf. anpassen, wenn du vom phpbb-Standard abweichst).
Die Sprachvariable NO_GROUP_MEMBER_NOT_AUTH muß dann noch in der language/sprache/memberlist.php definiert werden.
In der root/memberlist.php finde
Code: Alles auswählen
// Get user...
$sql = 'SELECT *
FROM ' . USERS_TABLE . '
WHERE ' . (($username) ? "username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'" : "user_id = $user_id");
$result = $db->sql_query($sql);
$member = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
Code: Alles auswählen
if (!($user->data['group_id'] == 5) && ($group_id = 21 && (!($user->data['user_id'] == $user_id) && !($user->data['group_id'] == 21))))
{
trigger_error('NO_GROUP_MEMBER_NOT_AUTH');
}
Die Sprachvariable NO_GROUP_MEMBER_NOT_AUTH muß dann noch in der language/sprache/memberlist.php definiert werden.
Re: Profil einer Gruppe unaufrufbar machen
Hallo Rare Essence,
Deine Lösung ist so einfach wie genial - eingebaut, ausgetestet: funktioniert genau wie benötigt! Besser geht es nicht!
Das "einfach" ist keineswegs abwertend gemeint, im Gegenteil. Ich kann die Lösung, jetzt wo ich es sehe, zwar nachvollziehen, aber draufgekommen wäre ich in (wahrscheinlich) Jahren nicht. Ein fettes Danke für Deine Hilfe
Deine Lösung ist so einfach wie genial - eingebaut, ausgetestet: funktioniert genau wie benötigt! Besser geht es nicht!

Das "einfach" ist keineswegs abwertend gemeint, im Gegenteil. Ich kann die Lösung, jetzt wo ich es sehe, zwar nachvollziehen, aber draufgekommen wäre ich in (wahrscheinlich) Jahren nicht. Ein fettes Danke für Deine Hilfe

Re: Profil einer Gruppe unaufrufbar machen
// Ich habe schon gesehen, daß Du den Code eingebaut hast, aber ich war gerade fertig mit schreiben
Also: Here it comes ->
Du kannst es auch etwas "globaler" machen, dann muß die Gruppe nicht die hauptgruppe sein, sondern das Userprofil wird auch nicht angezeigt, wenn der User einfach nur Mitglied der Gruppe ist und es nicht die Hauptgruppe ist:
Finde in besagter memberlist.php:
tausche aus gegen:

Du kannst es auch etwas "globaler" machen, dann muß die Gruppe nicht die hauptgruppe sein, sondern das Userprofil wird auch nicht angezeigt, wenn der User einfach nur Mitglied der Gruppe ist und es nicht die Hauptgruppe ist:
Finde in besagter memberlist.php:
Code: Alles auswählen
if (!$member)
{
trigger_error('NO_USER');
}
Code: Alles auswählen
/************************************************************/
if(!function_exists('group_memberships'))
{
include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
}
// define admin group
$sql = 'SELECT group_id
FROM ' . GROUPS_TABLE . "
WHERE group_name = 'ADMINISTRATORS'";
$result = $db->sql_query($sql);
$admin_group_id = (int) $db->sql_fetchfield('group_id');
$db->sql_freeresult($result);
// define group and check memberships
// define special group ID here, add more groups like that:
// $group_to_hide = array(21, 3, 45, 66 , 12);
$group_to_hide = array(21);
$is_member = group_memberships($group_to_hide, $user_id, true);
$is_also_member = group_memberships($group_to_hide, $user->data['user_id'], true);
//define user who have always access
$is_admin = group_memberships($admin_group_id, $user->data['user_id'], true);
$is_founder = $user->data['user_type'] == USER_FOUNDER;
if (!$member OR ($is_member AND !$is_admin AND !$is_founder AND !$is_also_member))
{
trigger_error('NO_USER');
}
/************************************************************/
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Ich schmeiß' alles hin und...
... lasse es liegen
- Rare Essence
- Mitglied
- Beiträge: 159
- Registriert: 16.09.2012 00:45
Re: Profil einer Gruppe unaufrufbar machen
Miriams Lösung ist natürlich variabler, aber ich würde hier NO_USER durch eine neue Sprachvariable ersetzen, damit wie von DetlefT gewünscht "Du bist nicht berechtigt, dieses Profil zu betrachten" o.ä. angezeigt wird.
Wenn's nicht gerade eine total versteckte Gruppe mit ebenfalls versteckten und sonst nicht in Erscheinung tretenden Nutzern ist, wäre es für die übrigen Mitglieder auch eher verwirrend, wenn die einen Profillink anklicken und dann kommt "Der ausgewählte Benutzer existiert nicht."
Ggf. müsste man dann "!$member OR" entfernen, um für !$member dann NO-USER auszuliefern. Bei meiner - ansonsten schon sehr geänderten memberlist.php blieb das aber irgendwie ohne Folgen ob mit oder ohne.
Na ja, es soll aber auch kein Problem von mir gelöst werden, ich will das praktisch auch nicht einbauen.
Wenn's nicht gerade eine total versteckte Gruppe mit ebenfalls versteckten und sonst nicht in Erscheinung tretenden Nutzern ist, wäre es für die übrigen Mitglieder auch eher verwirrend, wenn die einen Profillink anklicken und dann kommt "Der ausgewählte Benutzer existiert nicht."
Ggf. müsste man dann "!$member OR" entfernen, um für !$member dann NO-USER auszuliefern. Bei meiner - ansonsten schon sehr geänderten memberlist.php blieb das aber irgendwie ohne Folgen ob mit oder ohne.
Na ja, es soll aber auch kein Problem von mir gelöst werden, ich will das praktisch auch nicht einbauen.

Re: Profil einer Gruppe unaufrufbar machen
Hallo Miriam und Rare Essence,
muss mich jetzt noch mal melden. Nach dem lokalen Einbau auf einer identischen Installation - Dateien wie Datenbank - funktionierte die Lösung von Rare Essence wie oben euphorisch beschrieben. Also online gestellt, Cache geleert und mit dem Testuser ausprobiert: voila, funktioniert! Ca. 20 Minuten später die erste PN an mich als Admin, wieso man denn die Userprofile nicht mehr betrachten dürfe. Wieder mit dem Testuser ausprobiert: richtig, kein Profil mehr erreichbar, Snippet also erstmal schnell wieder ausgebaut.
Danach Miriams Lösung eingebaut, die Meldung statt mit 'NO_USER' wieder mit 'NO_GROUP_MEMBER_NOT_AUTH' realisiert, lokal ok, online gestellt, Cache geleert, alle Profile sind mit Testuser sichtbar, also kein Effekt!
Alles noch mal überprüft, nichts geändert, leicht frustriert, wieder rund 20 Minuten später: alles funktioniert wie gewünscht. Klasse, aber ratlos! Normalerweise glaube ich an solche Entwicklungen nicht, alle üblichen Vermutungen wie 2. Admin, der rumfummelt oder so, kann ich ausschließen, ebenfalls idiotische oder versehentliche Handlungen meinerseits. Mir wäre auch noch nie aufgefallen, dass das Hochladen von Dateien - Cache leeren vorausgesetzt - eine Zeitverzögerung mit sich gebracht hätte. Wie gesagt - ratlos. Aber es funktioniert, jedenfalls seit ca. einer halben Stunde (hoffentlich von Dauer
).
Deshalb auch an Dich, Miriam, meinen herzlichen Dank!

muss mich jetzt noch mal melden. Nach dem lokalen Einbau auf einer identischen Installation - Dateien wie Datenbank - funktionierte die Lösung von Rare Essence wie oben euphorisch beschrieben. Also online gestellt, Cache geleert und mit dem Testuser ausprobiert: voila, funktioniert! Ca. 20 Minuten später die erste PN an mich als Admin, wieso man denn die Userprofile nicht mehr betrachten dürfe. Wieder mit dem Testuser ausprobiert: richtig, kein Profil mehr erreichbar, Snippet also erstmal schnell wieder ausgebaut.
Danach Miriams Lösung eingebaut, die Meldung statt mit 'NO_USER' wieder mit 'NO_GROUP_MEMBER_NOT_AUTH' realisiert, lokal ok, online gestellt, Cache geleert, alle Profile sind mit Testuser sichtbar, also kein Effekt!

Alles noch mal überprüft, nichts geändert, leicht frustriert, wieder rund 20 Minuten später: alles funktioniert wie gewünscht. Klasse, aber ratlos! Normalerweise glaube ich an solche Entwicklungen nicht, alle üblichen Vermutungen wie 2. Admin, der rumfummelt oder so, kann ich ausschließen, ebenfalls idiotische oder versehentliche Handlungen meinerseits. Mir wäre auch noch nie aufgefallen, dass das Hochladen von Dateien - Cache leeren vorausgesetzt - eine Zeitverzögerung mit sich gebracht hätte. Wie gesagt - ratlos. Aber es funktioniert, jedenfalls seit ca. einer halben Stunde (hoffentlich von Dauer

Deshalb auch an Dich, Miriam, meinen herzlichen Dank!


- Rare Essence
- Mitglied
- Beiträge: 159
- Registriert: 16.09.2012 00:45
Re: Profil einer Gruppe unaufrufbar machen
Da die Änderung direkt in der memberlist.php erfolgte, sollte doch eine Cacheleerung keinen Einfluß haben. Die Änderung sollte mit dem Aufrufen der Datei angezeigt werden.
Merkwürdig ist das Verhalten, daß es erst geht, dann nicht bzw. umgekehrt, aber schon.
Merkwürdig ist das Verhalten, daß es erst geht, dann nicht bzw. umgekehrt, aber schon.

Re: Profil einer Gruppe unaufrufbar machen
Gern.DetlefT hat geschrieben:...Deshalb auch an Dich, Miriam, meinen herzlichen Dank!![]()

Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Ich schmeiß' alles hin und...
... lasse es liegen