Beiträge: 1.450
Themen: 155
Registriert seit: 18.03.2006
22.10.2006, 21:03
(Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2007, 16:34 von Jan.)
Hallo,
ich arbeite auf meiner Seite mit dem Usersystem des MyBB.
Jetzt möchte ich prüfen, ob ein User in einer bestimmten Gruppe ist.
Wie kann ich das machen?
Bei manchen ist sie ja die gid, bei anderen die additionalgroups oder auch die displaygroup.
Wie kann ich jetzt alles auf eine bestimme Gruppen prüfen?
Es handelt sich zum Beispiel um die Gruppe gid = 14 .
Wie muss solch eine Prüfung aussehen?
Beiträge: 1.626
Themen: 41
Registriert seit: 24.01.2006
22.10.2006, 21:26
(Dieser Beitrag wurde zuletzt bearbeitet: 22.10.2006, 21:29 von Garlant.)
Hallo Jan,
Wenn du die Usergruppe prüfel willst, dann kannst du das wie folgt machen:
PHP-Code: If ($mybb->user['usergroup']) == 'gruppenid' || $mybb->user['additionalgroups']) == 'gruppenid') { # In Gruppe } else { # Nicht in Gruppe }
Ich gebe keinen Support per Messenger oder PN!
Beiträge: 1.450
Themen: 155
Registriert seit: 18.03.2006
Beiträge: 1.626
Themen: 41
Registriert seit: 24.01.2006
22.10.2006, 22:19
(Dieser Beitrag wurde zuletzt bearbeitet: 22.10.2006, 22:21 von Garlant.)
Hallo Jan, hier noch eine ausgebesserte Variante:
PHP-Code: $str = "$mybb->user['additionalgroups']"; $array = explode(',', $str); foreach ($array as $addtionalgroup) { if ($mybb->user['usergroup'] == 'gruppenid' || $addtionalgroup == 'gruppenid') { # ist in der gruppe } elseif (mybb->user['usergroup'] != 'gruppenid' || $addtionalgroup != 'gruppenid') { # ist nicht in der Gruppe } }
Mfg Garlant
Ich gebe keinen Support per Messenger oder PN!
Beiträge: 1.450
Themen: 155
Registriert seit: 18.03.2006
Code stimmt noch nicht ganz:
Hier der korregierte:
PHP-Code: $str = $mybb->user['additionalgroups']; // Die "" dürfen nicht dort sein. $array = explode(',', $str); foreach ($array as $addtionalgroup) { if ($mybb->user['usergroup'] == 'gruppenid' || $addtionalgroup == 'gruppenid') { # ist in der gruppe } elseif ($mybb->user['usergroup'] != 'gruppenid' || $addtionalgroup != 'gruppenid') // $ vergessen gehabt { # ist nicht in der Gruppe } }
Ansonsten
Danke dafür.......
Beiträge: 1.450
Themen: 155
Registriert seit: 18.03.2006
25.10.2006, 18:18
(Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2006, 18:24 von Jan.)
Der Code pass noch nicht ganz.........
PHP-Code: $str = $mybb->user['additionalgroups']; $array = explode(',', $str); foreach ($array as $addtionalgroup) { if ($mybb->user['usergroup'] == '4' || $addtionalgroup == '4') { echo "<h1>Templates</h1>";
break; } elseif ($mybb->user['usergroup'] != '4' || $addtionalgroup != '4') { echo "Du hast keine Rechte diese Seite zu betreten";
break; } }
Vorher wurde der Code sonst unter Umständen mehrmals ausgeführt, der elseif Zweig hat bei mir mehrmals angeschlagen, da der User in mehreren Gruppen drin war, und somit die Bedingung auf mehrere Daten gepasst hat.
So wird nur bis zur Bedingung gearbeitet.
Findet noch jemand einen Fehler?
Beiträge: 1.626
Themen: 41
Registriert seit: 24.01.2006
Hallo Jan,
sage doch bitte was nicht passt.
Desweiteren gibt es einen "Bearbeiten Button". Bitte vermeide daher Doppelposts!
Mfg Garlant
Ich gebe keinen Support per Messenger oder PN!
Beiträge: 1.450
Themen: 155
Registriert seit: 18.03.2006
25.10.2006, 18:25
(Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2006, 19:38 von Jan.)
Ich hoffe ich habe jetzt ein sicheres und zuverlässiges Skript zusammengeschraubt.
Meine Test waren alle positiv. Wenn also von anderer Stelle kein Veto kommt, kann es wohl als die sicherste Lösung angesehen werden.
PHP-Code: ################### User Rechte System ######################
$allowed = ''; //Mehrere Gruppen durch Komma ',' trennen $not_allowed = ''; //Mehrere Gruppen durch Komma ',' trennen
if($mybb->user['uid'] != "0") //User ist online ? { $str = $mybb->user['additionalgroups']; ########################### $usergroup = explode(',', $str); # Alle Usergroupen werden # $usergroup[] = $mybb->user['usergroup']; # zusammengeholt # $usergroup[] = $mybb->user['displaygroup']; ###########################
############# jede Verbotene Gruppe testen ############ $array_not_allowed = explode(',', $not_allowed); foreach ($array_not_allowed as $forbidden) //jede Verbotene Gruppe testen { foreach ($usergroup as $user) //jede Usergruppe testen { if ($verboten == '1'){ break; } // Um die Schleife nur bis zur Erfüllung zu durchfahren if($user == $forbidden) // Verbotene Usergruppe? { # Zugang Verboten echo "Zugang Verboten"; $verboten = '1'; //Notwendige für die Abfrage in der foreach Schleife break; } } }
if ($verboten != '1') // Wurde der User schon ausgeschlossen? { ############# jede Erlaubte Gruppe testen ############ $array_allowed = explode(',', $allowed); foreach ($array_allowed as $access) //jede Erlaubte Gruppe testen { if ($erlaubt == '1'){ break; } // Um die Schleife nur bis zur Erfüllung zu durchfahren foreach ($usergroup as $user) //jede Usergruppe testen { if($user == $access) // Erlaubte Usergruppe? { # Zugang Erlaubt echo "Zugang Erlaubt"; $erlaubt = '1'; //Notwendige für die Abfrage in der foreach Schleife break; } } } } if(($erlaubt != '1') && ($verboten != '1')) { # Der User ist weder in einer erlaubten noch einer verbotenen Gruppe echo "Hmm, was machen wir mit dir?"; } } else { echo "Du bist nicht online"; // Der User ist garnicht angemeldet } ################### User Rechte System ######################
Beiträge: 1.626
Themen: 41
Registriert seit: 24.01.2006
27.10.2006, 19:34
(Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2006, 19:45 von Garlant.)
Hallo jan,
Besser ist dieser Code:
PHP-Code: <?php define("IN_MYBB", 1); require_once "./global.php";
$allowed_str = ''; /* Gruppen&Subgruppen die erlaubt sein sollen */ $allowed_array = explode(',', $allowed_str); /* Wir bilden ein array */ $additional_str = $mybb->user['additionalgroups']; /* Wir sehen uns die Subgruppen an */ $additional_array = explode(',', $additional_str); /* und bilden auch hier ein array */ if ($mybb->user['uid'] != '0') /* Ist der User angemeldet? */ { if (is_array($additional_array)) /* array Überprüfung */ { foreach ($additional_array as $addtionalgroup) { if (is_array($allowed_array)) /* array Überprüfung */ { foreach ($allowed_array as $allow) { if ($addtionalgroup == $allow && $mybb->user['usergroup'] == $allow) /* Prüfen der Gruppe&Subgruppe */ { $access = '1'; /* ist wahr, daher $acces = 1 */ break; } } } } } if ($access == '1') { echo "Erlaubt!<br />"; } else { echo "Nicht erlaubt!<br />"; } } else { #Gast / Nicht eingeloggt } ?>
Hier gibt es das Problem "was ist nun?" nicht, da der User nur dann Zugriff bekommt, wenn die Secondar Gruppen zugelassen sind.
Ein Hinweis noch: PHP-Code: $usergroup[] = $mybb->user['usergroup']; $usergroup[] = $mybb->user['displaygroup'];
Wenn ich mich nicht irre. Überschreibst du damit den einen String mit dem anderen.
Im jetzt geschriebenen Code ist alles notwendige enthalten und der Code sollte funktionieren.
Zusätzlich könnte man das jetzt sehr schön in eine Funktion packen und Beispielsweise auslagern.
Mfg Garlant
Ich gebe keinen Support per Messenger oder PN!
Beiträge: 1.450
Themen: 155
Registriert seit: 18.03.2006
27.10.2006, 23:29
(Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2006, 09:35 von Jan.)
Garlant schrieb:Ein Hinweis noch:PHP-Code: $usergroup[] = $mybb->user['usergroup']; $usergroup[] = $mybb->user['displaygroup'];
Wenn ich mich nicht irre. Überschreibst du damit den einen String mit dem anderen. Eigentlich nicht, zumindestens nicht bei meinem System, und auch nicht im PHP5 Buch.
Man erweitert so das Array um die Daten.
EDIT:
Ich hab noch einen Fehler entdeckt.
Die letzte if Abfrage war falsch. Erstens muss es eine OR Bedingung sein, zweitens haben die KLammern um die einzelnen Bedingungen gefehlt.
PHP-Code: if (($addtionalgroup == $allow) || ($mybb->user['usergroup'] == $allow))
Wie würde die Funktion dann aussehen? Ich habs schon versucht, nur leider bekomm ich lauter Fehler.
|