Zum Inhalt springen

fe_user : Zu welcher Gruppe gehört er?

Erstellt am 5. Juli 2006 · 7 Antworten · letzte Antwort am 22. März 2007

Tags: Frontend-Benutzer, PHP, Frage

Bitbull ·

Hallo zusammen.

Brüte bei 32°C über folgendem Problem:
Bei einer neuen Extension soll ein Teilbereich nur dann angezeigt werden, wenn der eingeloggte fe_user Mitglied einer ganz bestimmten Gruppe ist.

Nun kann man ja beispielsweise die uid des aktuellen Users mit einer Funktion wie

function user_getuserid($content,$conf)
{
return $GLOBALS['TSFE']->fe_user->user[uid];
}

auslesen. Somit wäre es theoretisch ebenfalls möglich, auf das Feld "usergroup" zuzugreifen. Ich würde dann allerdings ein Array erhalten, da ja ein User mehreren Groups zugeordnet sein kann.

Muss ich erst das Array auflösen, um danach z.B. in einer Abfrage zu klären, ob der User Mitglied der erlaubten Gruppe ist oder gibts für diese Problemstellung irgendwo eine elegantere Lösung?

Für abkühlende Hilfestellung sehr dankbar,

Bitbull

lefreak ·

Es gibt auf jeden Fall einen eleganteren Weg sich die Daten zu holen, da das Objekt $GLOBALS['TSFE']->fe_user bereits alle Userbezogenen Daten wie Gruppenzugehörigkeit etc. enthält. Schau es dir einfach mal mit print_r($GLOBALS['TSFE']->fe_user) an.

Ich würde deshalb auf die hier hinterlegten Werte zugreifen, die schleppst bei jedem Aufruf mit.

Ferner findest du in der Klasse tslib_feUserAuth alle benötigten Methoden um entsprechende Berechtigungen zu prüfen.

Bitbull ·

Merci, Monsieur Lefreak!

Hast mir sehr geholfen. Kannte die Klasse bisher nicht!

Danke.

Au revoir

Bitbull

lefreak ·

Wenn du es dir einfach machen willst verwendest einfach die
Methode function checkPageGroupAccess aus der class.tslib_fe.php.

function checkPageGroupAccess($row, $groupList=NULL) {
                 if(is_null($groupList)) {
                        $groupList = $this->gr_list;
                 }
                 if(!is_array($groupList)) {
                        $groupList = explode(',', $groupList);
                 }
                 $pageGroupList = explode(',', $row['fe_group'] ? $row['fe_group'] : 0);
                 return count(array_intersect($groupList, $pageGroupList)) > 0;
         }
Bitbull ·

Ich nochmal.

nochmals vielen Dank bei Monsieur Lefreak. Die Funktionen waren für mich hilfreich; am Ende jedoch habe ich jedoch erstmal "schnell und schmutzig" gecodet, um meinem Ansinnen gerecht zu werden.

Damit nun alle Forenmitglieder mit ähnlich gelagertem Problem meiner Erkenntnis teilhaftig werden, hier mein Lösungsweg (ich gebe gerne zu, dass er noch stark ausbaufähig ist - Stichworte: Flexforms, mehrere Groups, Validierung...)

Zur Sache:

1.
Im TS definieren wir, welche FE-Group "mehr" sehen soll als die anderen:

# Das Plugin "extensionname" erhält eine FE_Group für den Godmode
plugin.tx_extensionname_pi1 {
	allmightyGroup=3
}

2.
An passender Stelle in der Extension bauen wir folgende Variablenzuweisung mit anschließender Abfrage ein:

			$userGroupList = explode(',',$GLOBALS['TSFE']->fe_user->user[usergroup]);
			
	// Vergleiche das Array mit der im TS bestimmten Group
	if (in_array($this->conf['allmightyGroup'], $userGroupList)) {
		// User darf alles sehen : "Godmode"
		// Code einfügen
	} else {
		// User sieht nur Standard
		// Code einfügen
	}

Tjo. Das wars auch schon. Funzt wie's soll und ist nach meinem Geschmack nicht sonderlich überfrachtet. Für Anregungen aber weiterhin dankbar,

Bitbull

dapter ·

Dein Lösungsansatz ist leider unvollständig. $GLOBALS['TSFE']->fe_user->user[usergroup] enthält nicht alle Gruppen, denen ein User zugeordnet ist, sondern nur die, die man beim Bearbeiten des Benutzers "direkt" eingetragen hat. Nun können Gruppen aber Untergruppen haben. Ein FE-User einer Obergruppe ist automatisch auch Mitglied der Untergruppe. In deinem Ansatz ist das aber nicht berücksichtigt.

Ich frage mich gerade, ob $GLOBALS['TSFE']->gr_list hier hilfreich sein kann, bin aber noch nicht ganz schlau geworden aus diesem kommaseparierten Wert...

Bitbull ·

Nachtrag zu dapter:

das mag sein, aber in dieser speziellen Umgebung lege nur ich fest, wer in welche Gruppe kommt.

Ferner kann man bei komplexeren Anwendungen eine Abfrage nach dem Schema laufen lassen:

SELECT * FROM fe_users WHERE usergroup LIKE '%".$this->piVars['auswGROUP']."%' AND disable=0 AND deleted=0

Viele Grüße

Bitbull