Zum Inhalt springen

Zugewiesene Gruppen eines FE-Users auslesen

Erstellt am 31. März 2009 · 3 Antworten · letzte Antwort am 1. April 2009

Tags: Frontend-Benutzer, PHP, Frage

sopinon ·

Hallo zusammen,

Mittels

<?php
$gruppen = $TSFE->fe_user->groupData['uid'];
?>

erhält man ja bekanntlich alle UID's der zugewiesenen Gruppen des eingeloggten Users (inklusive Verbindung mit Untergruppen etc.) als Array zurück.

Soweit so gut, doch nun möchte ich jedoch diese Gruppeninformationen nicht nur vom eingeloggten User sondern von irgend einem anderen Benutzer. Gibt es da eine Typo3 Funktion oder Klasse um an diese Gruppen zu kommen (nicht nur Feld usergroup, sondern inkl. untergruppen Verbindungen etc.)?

Danke für eure Antworten.

einpraegsam.​net ·

Hier ein Beispiel aus powermail_frontend wie man fe_users und fe_groups per SQL select verknüpfen kann:

'fe_users.uid fe_users_uid, fe_groups.uid fe_groups_uid',
			'tx_powermail_mails, fe_users, fe_groups, sys_refindex',
$where_clause = 'sys_refindex.tablename = "fe_users" AND sys_refindex.ref_table = "fe_groups" AND fe_users.uid = sys_refindex.recuid AND fe_groups.uid = sys_refindex.ref_uid AND fe_users.uid = tx_powermail_mails.feuser AND tx_powermail_mails.uid = '.intval($uid),
$groupBy = '',
$orderBy = '',
$limit = 1000
sopinon ·
einpraegsam.net schrieb

Hier ein Beispiel aus powermail_frontend wie man fe_users und fe_groups per SQL select verknüpfen kann:

Danke für deine Antwort, hat leider nicht so funktioniert wie es sollte. Es wurden nur die unter dem FE-User direkt zugewiesenen Gruppen ausgegeben. Indirekt verknüpfte Gruppen (Untergruppen innerhalb einer Gruppe) wurden nicht ausgegeben. Folgenden Befehl habe ich verwendet:

<?php
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery (
	'fe_groups.uid fe_groups_uid',
	'fe_users, fe_groups, sys_refindex',
	$where_clause = 'sys_refindex.tablename = "fe_users" AND sys_refindex.ref_table = "fe_groups" AND fe_users.uid = sys_refindex.recuid AND fe_groups.uid = sys_refindex.ref_uid AND fe_users.uid = '.intval($this->eUser),
	$groupBy = '',
	$orderBy = '',
	$limit = 1000
);
$groupRows = array();
if ($res) {
	while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
		array_push($groupRows, $row['fe_groups_uid']);
	}
}
$groupData = implode(',', $groupRows);
?>
sopinon ·

Folgende Lösung funktioniert mal mit einer Ebene subgroup dabei...

<?
$sql = "select fg3.uid
		from (select fg.uid,
			fg.subgroup
			from fe_users fu
			left join fe_groups fg
			on find_in_set(fg.uid, fu.usergroup) and !fg.deleted and !fg.hidden
			where fu.uid = ".intval($this->eUser).") fg2
		left join fe_groups fg3
		on fg3.uid = fg2.uid or find_in_set(fg3.uid, fg2.subgroup) and !fg3.deleted and !fg3.hidden
		group by fg3.uid";
$res = $GLOBALS['TYPO3_DB']->sql_query($sql);
$groupRows = array();
if ($res) {
	while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
		array_push($groupRows, $row['uid']);
	}
}
$groupData = implode(',', $groupRows);

?>

Das reicht mal für's erste, doch ist diese Lösung nicht wirklich sauber! am liebsten wäre mir etwas rekursives! Oder eben mittels einer bereits existirenden Klass oder Funktion von Typo3. Hat da jemand eine Idee?