Hallo, Gast! (Registrieren)

Wir wünschen allen Besuchern frohe Ostern!

Letzte Ankündigung: MyBB 1.8.37 veröffentlicht (04.11.23)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
[Gelöst]Additional Groups
#1
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?

#2
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!
#3
Danke

#4
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!
#5
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.......

#6
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?

#7
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!
#8
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 ###################### 

#9
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!
#10
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.