Seite 1 von 2

Usergruppe auslesen

Verfasst: Mi 4. Nov 2009, 21:56
von almighty7
Hallo liebe Leute,

ich habe jetzt schon einige Websites auf Contenido umgesetzt und bin begeistert vom System. Nun stoße ich aber anscheinend auf ein Problem des Rechtesystems, welches ich nicht umgehen kann:

Ein User ist in der Gruppe "Redaktion ohne Bild" und kann Artikel in einer Kategorie editieren. Nun möchte ich gerne auslesen, in welcher Usergruppe der User steckt, damit ich in den Modulen den Editierbutton für Bilder ausblenden kann (per If-Abfrage). Kann mir einer weiterhelfen, wie cih die Usergruppe aus der Datenbank bekomme? User ID habe ich schon per $auth herausbekommen, habe nur keinen Ansatz nun noch die Gruppe auszulesen.

Liebe Grüße
Marcel

Re: Usergruppe auslesen

Verfasst: Do 5. Nov 2009, 08:43
von _wiewo_
dürfte ganz easy zu lösen sein

Hier mal der Code

Code: Alles auswählen

<?php 

$oFrontendUser = new FrontendUser();
$oFrontendUser->loadByPrimaryKey($auth->auth['uid']);
$aFrontendUserGroups = $oFrontendUser->getGroupsForUser();

$iGruppeFuerUserMitBildRechten = 1;

if (in_array($iGruppeFuerUserMitBildRechten, $aFrontendUserGroups)) {
	// der aktuelle FrontendUser ist in der Gruppe
}

?>
hoffe klappt

Re: Usergruppe auslesen

Verfasst: Do 5. Nov 2009, 09:29
von Dodger77
Verschoben, kein Tipp/Trick.

Re: Usergruppe auslesen

Verfasst: So 8. Nov 2009, 17:30
von almighty7
_wiewo_ hat geschrieben:dürfte ganz easy zu lösen sein

Hier mal der Code

Code: Alles auswählen

<?php 

$oFrontendUser = new FrontendUser();
$oFrontendUser->loadByPrimaryKey($auth->auth['uid']);
$aFrontendUserGroups = $oFrontendUser->getGroupsForUser();

$iGruppeFuerUserMitBildRechten = 1;

if (in_array($iGruppeFuerUserMitBildRechten, $aFrontendUserGroups)) {
	// der aktuelle FrontendUser ist in der Gruppe
}

?>
hoffe klappt
Hallo Christian,

Diese Spalte muss ich doch sicherlich anpassen und mit dem Namen der Gruppe vershene, oder?

$iGruppeFuerUserMitBildRechten = 1;

Irgendwie geht das nämlich bei mir nicht

Re: Usergruppe auslesen

Verfasst: Mo 9. Nov 2009, 07:08
von _wiewo_
da muss die ID der Gruppe rein
wenn du im backend mit der maus auf die gruppe im linken menü zeigst erkennst du an dem link den er aufrufen will die ID der gruppe

oder öffnest deine DB und guckst in der frontendusergruppe tabelle nach

Re: Usergruppe auslesen

Verfasst: Di 10. Nov 2009, 18:31
von almighty7
Ah, OK, ich steige langsam dahinter, es sind Frontend Usergruppen gemeint, die ausgelesen werden. Bei mir ist der User aber in einer Usergruppe, die im CMS angelegt worden ist. Ein Frontenduser kann sich ja nicht im CMS einloggen und dort Inhalte ändern, oder?

Re: Usergruppe auslesen

Verfasst: Di 10. Nov 2009, 18:39
von Dodger77
Dann sollte das so in der Art funktionieren (ungetestet):

Code: Alles auswählen

<?php

$oUser = new User();
$aUserGroups = $oUser->getGroupIDsByUserID($auth->auth['uid']);

$iGruppeFuerUserMitBildRechten = 1;

if (in_array($iGruppeFuerUserMitBildRechten, $aUserGroups)) {
    // der aktuelle User ist in der Gruppe
} else {
    // der aktuelle User ist nicht in der Gruppe
}

?>

Re: Usergruppe auslesen

Verfasst: Di 10. Nov 2009, 18:56
von _wiewo_
ah sorry ja das habe ich nicht beachtet
war im frontenduser trott

Re: Usergruppe auslesen

Verfasst: Mi 11. Nov 2009, 21:50
von almighty7
Übrigens: Vielen lieben Dank für eure tatkräftige Unterstützung bei Contenido :)

Leider funktioniert das Script nicht es kommt folgende Fehlermeldung:

Fatal error: Call to undefined method User::getGroupIDsByUserID() in xxx/contenido/includes/include.con_editcontent.php(638) : eval()'d code on line 331

Re: Usergruppe auslesen

Verfasst: Mi 11. Nov 2009, 21:59
von _wiewo_
getGroupsByUserID heißt es richtig :)

Re: Usergruppe auslesen

Verfasst: Do 12. Nov 2009, 08:34
von Dodger77
Hm, sehe gerade, dass es die Methode erst ab der nächsten Contenido-Version geben wird. Könnte man aber in der "contenido/classes/class.user.php" ergänzen:

Code: Alles auswählen

    /**
     * getGroupIDsByUserID()
     * Returns the groups a user is in
     * @return array ids of groups
     */
	function getGroupIDsByUserID ($userid) {

        global $cfg;

        $db = new DB_Contenido;

        $sql = "SELECT
                    a.group_id
                FROM
                	".$cfg["tab"]["groups"]." AS a,
                	".$cfg["tab"]["groupmembers"]." AS b
				WHERE
					(a.group_id  = b.group_id)
					AND 
					(b.user_id = '".Contenido_Security::escapeDB($userid, $db)."')
				";

        $db->query($sql);
        
		$arrGroups = array();
		
		while ($db->next_record()) {
			
			$arrGroups[] = $db->f('group_id');
		}
        return $arrGroups;
	}

Re: Usergruppe auslesen

Verfasst: Do 12. Nov 2009, 08:52
von idea-tec
jetzt ohne beide funktionen verglichen oder geprüft zu haben, aber wozu 2 funktionen für (fast?) das gleiche :?: :?: :?:

wieso überhaupt eine neue?
ist das wieder so ein quatsch, wegend er rückwärtskompatibilität?

Re: Usergruppe auslesen

Verfasst: Do 12. Nov 2009, 09:40
von Dodger77
idea-tec hat geschrieben:jetzt ohne beide funktionen verglichen oder geprüft zu haben, ...
Warum nicht? Hätte vielleicht eine Minute gekostet und evtl. bereits einige deiner Fragen beantwortet. :wink:

Die Rückgabewerte beider Methoden sind dann doch ziemlich unterschiedlich. getGroupsByUserID() enthält z.B. keinerlei Angaben über die IDs der Gruppen. Hätte man natürlich auch über die getGroupsByUserID() lösen können, indem das Rückgabe-Array die Gruppen-IDs als Key verwendet.

Re: Usergruppe auslesen

Verfasst: Do 12. Nov 2009, 10:03
von idea-tec
Dodger77 hat geschrieben:Hätte man natürlich auch über die getGroupsByUserID() lösen können, indem das Rückgabe-Array die Gruppen-IDs als Key verwendet.
ich muss gestehen, dass ich an der stelle keine neue funktion erstellt sondern die vorhandene erweitert hätte.
dient, wenn man es richtig macht, nämlich am besten der rückwärtskompatibilität ;-)

Re: Usergruppe auslesen

Verfasst: Do 12. Nov 2009, 11:28
von _wiewo_
und ich hab mir die funktion garnicht angeguckt, hab nen schreibfehler vermutet :D

so nen simples thema kann so toll werden, ich liebe es :D