Seite 2 von 2

Verfasst: 29.08.2007 14:52
von Karsten A
Hallo,

ich habe alles noch einmal von vorn angefangen und jetzt funktioniert ist.
Vielen Dank für Deine Mühe.

Gruß
Karsten

Verfasst: 08.10.2007 20:26
von gn#36
Kleine Änderung, damit das auch mit der Suche funktioniert und auch nicht per direktem Zugriff auf die Posts zugegriffen werden kann:

Finde in der viewtopic.php

Code: Alles auswählen

$sql = "SELECT t.topic_id, t.topic_title, t.topic_status, 
füge in dieser Zeile direkt nach dem Ausschnitt ein:

Code: Alles auswählen

t.topic_poster, 
Dann ein paar Zeilen später das bereits eingefügte

Code: Alles auswählen

if( $is_auth['auth_read_self_topics'] )
ersetzen durch

Code: Alles auswählen

if( $is_auth['auth_read_self_topics'] && $forum_topic_data['topic_poster'] == $userdata['user_id'] )
Jetzt ist der direkte Zugriff auch gesperrt.

Um die Suche anzupassen sind ein paar Anpassungen an der search.php notwendig.
Suche hier nach

Code: Alles auswählen

if ( $search_forum != -1 )
		{
			$is_auth = auth(AUTH_READ, $search_forum, $userdata);
Danach hinzufügen:

Code: Alles auswählen

$auth_read_self = auth(AUTH_READ_SELF_TOPICS, $search_forum, $userdata);
Direkt darunter nach

Code: Alles auswählen

if ( !$is_auth['auth_read'] )
			{
				message_die(GENERAL_MESSAGE, $lang['No_searchable_forums']);
			}
muss das hier:

Code: Alles auswählen

elseif(($is_auth['auth_read'] === AUTH_SELF && $auth_read_self['auth_read_self_topics'] == false))
			{
				$auth_self_list[] = $search_forum; //Speichern, dass in dem Forum nur eigene Themen gesehen werden dürfen.
			}
Wieder ein paar Zeilen später dann nach dem hier:

Code: Alles auswählen

$is_auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata); 
dann dass:

Code: Alles auswählen

$auth_read_self = auth(AUTH_READ_SELF_TOPICS, AUTH_LIST_ALL, $userdata); //AUTH_READ_SELF
Dieser kurze Block:

Code: Alles auswählen

if ( !$value['auth_read'] )
				{
					$ignore_forum_sql .= ( ( $ignore_forum_sql != '' ) ? ', ' : '' ) . $key;
					
				}
wird ersetzt durch das hier:

Code: Alles auswählen

if ( !$value['auth_read'] || ($value['auth_read'] === AUTH_SELF && $auth_read_self[$key]['auth_read_self_topics'] == false) ) //Foren in denen nur eigene Themen gesehen werden dürfen ignorieren.
				{
					$ignore_forum_sql .= ( ( $ignore_forum_sql != '' ) ? ', ' : '' ) . $key;
					if($value['auth_read'] === AUTH_SELF)//Zwischenspeichern wenn man nur eigene Themen in diesem Forum sehen darf.
					{
						$auth_self_list[] = $key;
					}
				}
Das hier:

Code: Alles auswählen

if ( $ignore_forum_sql != '' )
			{
				$auth_sql .= ( $auth_sql != '' ) ? " AND f.forum_id NOT IN ($ignore_forum_sql) " : "f.forum_id NOT IN ($ignore_forum_sql) ";
			}
wird ersetzt durch

Code: Alles auswählen

if ( $ignore_forum_sql != '' )
			{
				if($auth_self_list)
				{
					$auth_self_list = implode(', ', $auth_self_list);
					$auth_sql .= ( $auth_sql != '' ) ? " AND (f.forum_id NOT IN ($ignore_forum_sql) OR (t.topic_poster = ".$userdata['user_id']." AND f.forum_id IN ($auth_self_list) ))" : "(f.forum_id NOT IN ($ignore_forum_sql) OR (t.topic_poster = ".$userdata['user_id']." AND f.forum_id IN ($auth_self_list))) ";
				}
				else
				{
					$auth_sql .= ( $auth_sql != '' ) ? " AND f.forum_id NOT IN ($ignore_forum_sql) " : "f.forum_id NOT IN ($ignore_forum_sql) ";
				}
			}
Zum Abschluss muss noch nach

Code: Alles auswählen

$from_sql = POSTS_TABLE . " p";
und nach

Code: Alles auswählen

$select_sql = ( $search_author == '' && $auth_sql == '' ) ? 'post_id' : 'p.post_id';
					$from_sql = (  $search_author == '' && $auth_sql == '' ) ? POSTS_TABLE : POSTS_TABLE . ' p';
jeweils das hier:

Code: Alles auswählen

if(isset($auth_self_list) && $auth_self_list) //ADDED
						{
							$from_sql .= ", " . TOPICS_TABLE . " t";
							$where_sql .= " AND t.topic_id = p.topic_id ";
						}
Ich hoffe dass ich da jetzt keine der vielen Änderungen in der Datei vergessen habe, auf jeden Fall sollte im Anschluss auch die Suche nur noch die Themen zeigen die man tatsächlich sehen darf.
Und das ganze hat sich mal wieder in Richtung eines kleinen Mods entwickelt :-?

Verfasst: 09.10.2007 16:51
von mgutt

Code: Alles auswählen

, f.auth_reply_self_topics, f.auth_read_self_topics
Fehlt noch in viewtopic.php bei der db-Abfrage, ansonsten resultiert das jeweilige Recht mit TRUE in auth.php.