Seite 1 von 1

Für jeden Benutzer ein eigener Gruppeneintrag?

Verfasst: 20.06.2005 12:47
von neuro
Hallo,

warum bekommt eigentlich jeder normale Benutzer, der keiner bestimmten Gruppe angehört, einen eigenen Eintrag in phpbb_groups:

Code: Alles auswählen

INSERT INTO " . GROUPS_TABLE . " (group_name, group_description, group_single_user, group_moderator)
				VALUES ('', 'Personal User', 1, 0)

$group_id = $db->sql_nextid()

INSERT INTO " . USER_GROUP_TABLE . " (user_id, group_id, user_pending)
				VALUES ($user_id, $group_id, 0)
Wäre es nicht sinnvoller, wenn man dort einmal eine Gruppe "Personaluser" erstellt und allen normalen Benutzern diese Gruppe zuweist?

Was würde passieren, wenn man bei der Anmeldung einem Benutzer nur die Gruppe "Personaluser" zuweist, aber keinen eigenen Gruppeneintrag erstellt?

MfG. neuro

Re: Für jeden Benutzer ein eigener Gruppeneintrag?

Verfasst: 20.06.2005 16:48
von QCO
neuro hat geschrieben:Was würde passieren, wenn man bei der Anmeldung einem Benutzer nur die Gruppe "Personaluser" zuweist, aber keinen eigenen Gruppeneintrag erstellt?
Du könntest für einzelne Nutzer keine Rechte mehr einstellen, nur noch für die Gruppe "Personaluser".
Man kann ja sowohl als einzelner Nutzer als auch als Gruppe Rechte haben.
Damit man bei der Verwaltung und Kontrolle usw. dieser Rechte nicht immer Nutzer und Gruppen betrachten muss (Performance!), werden einzelne Nutzer auch zu Gruppen gemacht.

Verfasst: 23.02.2006 15:27
von adamo
Da vermutlich keiner so irre ist, in einem großen Forum, dem User direkt Rechte zu geben, dient dieser Eintrag lediglich dem "Zumüllen" der DB und bremst ein Forum extrem aus, sofern man Userzahlen über 20k hat und stetig 50+ User online hat (Bei uns macht das (ca. 200 User über 11 Stunden stetig online) einige Sekunden in der Ladezeit aus, sofern beides gelöscht wird)

Eine der schönsten Optimierungselemente, da die gesamte angedachte Funktion absolut überflüssig ist. ;)

Verfasst: 23.02.2006 19:03
von adamo
Dabei fällt mir noch etwas ein:

Killt diesen Eintrag, soweit die Auflistung nicht benötigt wird.
Bei großen Foren eine absolute Spaßbremse.

Code: Alles auswählen


####### INDEX.PHP #########

	$sql = "SELECT aa.forum_id, u.user_id, u.username 
		FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE . " u
		WHERE aa.auth_mod = " . TRUE . " 
			AND g.group_single_user = 1 
			AND ug.group_id = aa.group_id 
			AND g.group_id = aa.group_id 
			AND u.user_id = ug.user_id 
		GROUP BY u.user_id, u.username, aa.forum_id 
		ORDER BY aa.forum_id, u.user_id";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql);
	}

	$forum_moderators = array();
	while( $row = $db->sql_fetchrow($result) )
	{
		$forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '">' . $row['username'] . '</a>';
	}
	$db->sql_freeresult($result);


	$sql = "SELECT aa.forum_id, g.group_id, g.group_name 
		FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g 
		WHERE aa.auth_mod = " . TRUE . " 
			AND g.group_single_user = 0 
			AND g.group_type <> " . GROUP_HIDDEN . "
			AND ug.group_id = aa.group_id 
			AND g.group_id = aa.group_id 
		GROUP BY g.group_id, g.group_name, aa.forum_id 
		ORDER BY aa.forum_id, g.group_id";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql);
	}

	while( $row = $db->sql_fetchrow($result) )
	{
		$forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("groupcp.$phpEx?" . POST_GROUPS_URL . "=" . $row['group_id']) . '">' . $row['group_name'] . '</a>';
	}
	$db->sql_freeresult($result);
Wer es aufgelistet haben möchte, schreibe diese in eine extra Tabelle (Bei der Anlegung) und liest diese aus. Der Code, welcher in PHPBB dafür enthalten ist, gehört eindeutig verschrottet.

Verfasst: 23.02.2006 22:34
von V1tzl1
Also nur nochmal für mich, die eigene Usergruppe dient ausschließlich der Rechteverteilung und kann über reguläre Gruppen geregelt werden?

Verfasst: 24.02.2006 03:50
von adamo
Ja zur Frage im ersten Teil des Themas.

Mein zweiter Beitrag bezieht sich auf die Moderatoren.
Es werden hierbei alle Gruppen durchgesehen.

Wer beides nutzt und viele User hat, der bremst sein Forum unverhältnismäßig aus.

Auf der Indexseite sind weder die Moderatorenrechte wichtig (Die Rechte der Ansicht für die Foren bleibt erhalten), noch sonst irgendetwas davon. Es dient lediglich zur Ansicht der Moderatoren im einzelnem Forum.
Dieser absolute Killerquery bremst ein Forum aus, mit jedem User der in eine Gruppe gelegt wird oder eben angelegt wird.

Wer Moderatoren angezeigt bekommen möchte in den einzelnen Foren, der füge einfach nach seiner Forenbeschreibung ein:
Forenbeschreibung = ACP (Adminbereich), Kategorie Foren - dort Einstellungen, Forum auswählen, auf Bearbeiten gehen, dort unter Beschreibung - nach dem gewünschten Text- eintragen: <br /><b>Moderator:</b> Moderatorenname, Moderatorenname2, etc.

Es betrifft nur den Bereich der Indexseite des Forums. in den einzelnen Foren werden die Moderatoren weiterhin angezeigt.

Alternativ die Moderatoren in einem zusätzlichen Feld der Forentabelle (DB) eintragen. Die Tabelle der Foren wird ohnehin abgefragt und belastet das Forum somit absolut nicht. Bei Gelegenheit schreibe ich einmal meinen Code als Mod ins Forum, da diese absolut kranke Abfrage ja auch bspw. in der viewforum.php enthalten ist. Auch dort dient diese Abfrage nur der Anzeige wer dort Moderator ist.