Seite 1 von 1

Profile und Mitgliederliste nur für eine Gruppe !

Verfasst: 25.12.2003 18:37
von Saber_Rider
Hi, ich habe mit Hilfe von diesem Thread http://www.phpbb.de/viewtopic.php?t=16206 die Mitgliederliste und Profile nur für registrierte User sichtbar gemacht.
Genauer gesagt habe ich

Code: Alles auswählen

	if ( $mode == 'viewprofile' )
	{
		include($phpbb_root_path . 'includes/usercp_viewprofile.'.$phpEx);
		exit;
	}
zu

Code: Alles auswählen

	if ( $mode == 'viewprofile' )
	{
		if ( !$userdata['session_logged_in'] ) 
		{
			message_die( GENERAL_MESSAGE, $lang['Not_Member'] );
		}
		include($phpbb_root_path . 'includes/usercp_viewprofile.'.$phpEx);
		exit;
	}
geändert und das $lang['Not_Member'] in die lang_main.php eingefügt.

Jetzt würde ich es gerne so erweitern, dass das Profil nur von Mitgliedern einer bestimmten Gruppe eingesehen werden kann. Bei der Mitgliederliste wär es mir erstmal egal, bzw die Änderung ist ja fast die selbe.

In der Tabelle user_group steht ja welcher User in welcher Gruppe ist. Leider kann ich mir meine eigene Tabelle momentan nicht anschauen, müsste aber trotzdem die Änderung vornehmen. Ist die group_id in user_group und groups bzw. die user_id in user_group und user identisch? (ich nehme es mal an).
Wenn dies so ist müsste ich eine Abfrage machen mit:
if ( $userdata['user_id'] in (select user_id from user_group where group_id == 2 ) )
So hätten nur die Mitglieder der Gruppe 2 Zugriff auf die Profile.
Kann mir jetzt einer sagen wie das syntaktisch funktionieren könnte? Oder hat einer eine bessere Idee?
Ideal wäre eigentlich, wenn jeder User nur Profile seiner eigenen Gruppe sehen kann. Da es aber auch Mitglieder von mehr als einer Gruppe gibt und dann der User der Gruppe 3 nicht die Profile der User die in Gruppe 2 und 3 sind sehen darf (je mehr Gruppen, desto previlegierter sozusagen) ist mir das momentan zu umständlich. Es gäbe also momentan nur eine Supergruppe die alle Profile sehen darf und der Rest keines.

Wo wir schon bei Gruppen sind. Kann mir einer veraten wie ich eine Gruppe als Mitglied einer anderen Gruppe machen kann? Also alle Mitglieder meiner Supergruppe sind automatisch Mitglied einer anderen Gruppe. Geht das irgendwie? Grad fällt mir nur ein, dass ich einen Trigger einbaue, der automatisch den entsprechenden Eintrag in der user_groups Tabelle schreibt. Geht das oder hat da phpbb etwas dagegen?

tnx, Saber_Rider

Verfasst: 25.12.2003 19:16
von Acid
http://www.phpbb.de/viewtopic.php?t=9536 (zum ersten Teil deines Beitrages)

Verfasst: 25.12.2003 19:51
von Saber_Rider
Danke, das kann ich eventuell passend modifizieren, damit ich sogar noch zu meinem zweiten Teil komme.
Wenn ich eine Profil Seite aufrufe, in welcher Variablen steht dann die id von dem User dessen Profil ich aufrufe? Weil bei

Code: Alles auswählen

include($phpbb_root_path . 'includes/usercp_viewprofile.'.$phpEx);
hab ich irgendwie nichts gefunden.
Wenn ich dessen id weiß kann ich ja auch seine Gruppe herausfinden und die dann einfach vergleichen.

Verfasst: 25.12.2003 20:08
von Acid
hmm.. was genau willst du jetzt mit der UserID machen? Bei der Gruppen-Zugangsberechtigung (s. obiger Link) musst du die GruppenID, in der der User Mitglied ist, angeben.

Verfasst: 25.12.2003 20:17
von Saber_Rider
Bei der Gruppenzugangsberechtigung kann ich angeben, dass nur User der Gruppe 2 Zugriff auf die Profile haben. Soweit so gut.
Mein zweiter Wunsch war, dass ich die User_ID des Mitglieds habe von dem das Profil aufgerufen werden soll, dann kann ich mir die Gruppen holen in der dieser User ist und dann vergleiche ich die beiden Gruppen. Sind sie identisch, dann darf der User das Profil des anderen einsehen.
Schwierig wird es nur wenn ein User in Gruppe 1 und 2 ist und der User der sein Profil aufrufen will ist nur in Gruppe 2, dann darf er sein Profil nicht aufrufen, aber da muss ich einfach abbrechen wenn ich eine Gruppe gefunden habe die nicht beim Aufrufenden vorkommt. So in etwa müsste es klappen. Dazu brauche ich aber die User_id von dem User dessen Profil aufgerufen werden soll.

Verfasst: 25.12.2003 23:06
von Acid
hmm.. eventuell verstehe ich dein Anliegen jetzt bloss nicht 100%ig, aber eigentlich brauchst du nur die ID des User, der sich grad das Profil anschaut, ($userdata['user_id']) mit der des Profils ($profiledata['user_id']) vergleichen.
Wenn beide IDs übereinstimmen, dann kann dieser User auch auf das besagte Profil zugreifen.

Verfasst: 26.12.2003 00:15
von Saber_Rider
Genau das mit dem $profiledata wollte ich wissen. Damit müsste der Rest gut machbar sein. Jetzt brauch ich nur noch die Zeit um es mal einzubauen.
Gibt es eigentlich irgendwo so eine Übersicht der Variablen? Habe in der Dokumentation nichts gefunden.

Vielen Dank Acid, Saber_Rider

Verfasst: 08.01.2004 20:24
von Saber_Rider
So, jetzt nach den Ferien hab ich endlich wieder Zugriff vom Server und konnte es testen. Leider hab ich das Problem, dass die Variable $profiledata['user_id'] irgendwie leer ist. Mit

Code: Alles auswählen

	        $sql = "SELECT group_id
	                FROM " . USER_GROUP_TABLE .
	                " WHERE user_id = '" . $profiledata['user_id'] . "'";
	        if ( !($profile_result = $db->sql_query($sql)) )
	        {
	                message_die(GENERAL_ERROR, 'Could not get user group.', '', __LINE__, __FILE__, $sql);
	        }
		$access_allowed = true;
	        while( $profile_group_id = $db->sql_fetchrow($profile_result) )
	        {......
wollte ich eigentlich alle Gruppen IDs von dem User auslesen dessen Profil betrachtet werden soll. Der ganze Code ist in der profile.php irgendwo hinter

Code: Alles auswählen

	if ( $mode == 'viewprofile' )
	{
eingebaut. Aber wie gesagt, die Variable $profiledata ist leer und deswegen bekomme ich auch keine Gruppen. In die while-schleife komme ich deswegen auch nie rein.
Wie klappt das denn jetzt das ich an die User_id vom zu betrachtenden User komme?

Saber_Rider

Verfasst: 09.01.2004 13:45
von Saber_Rider
Ok, hat sich erledigt. In der profile.php gabs die $profiledata noch nicht. Weil ich da ja noch nirgens drauf geklickt hatte. Erst in der includes/usercp_viewprofile.php konnte ich drauf zugreifen.