Wie setze ich Rechte um?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie setze ich Rechte um?

    Komm nicht weiter.

    Wie kann ich Rechte einzelner User im Forum umsetzen?

    User 1 ist Gast
    Als Gast darf er nur in allen offenen Foren lesen.

    User 2 ist User noch nicht freigeschaltet
    als User_un darf er nur in allen offenen Foren lesen.

    User 3 ist User registriert
    als User_reg darf er in allen offenen Foren Lesen und schreiben.

    User 4 ist Mod
    Als Mod darf er in allen Foren lesen und schreiben, sowie noch andere Sachen machen

    User 5 ist Admin
    Als Admin hat er alle Rechte

    Wer kann mir auf die Sprünge helfen?
    *winks*
    Gilbert
    ------------------------------------------------
    Hilfe für eine Vielzahl von Problemen!!!
    http://www.1st-rootserver.de/

  • #2
    In Forensystemen wird üblicherweise ein Gruppensystem verwendet - weil es einfach sehr praktisch ist.

    Du teilst deine Benutzer in verschiedene Gruppen ein:
    User, Moderatoren, Admins, nicht aktivierte User
    Gäste kommen automatisch in die Gruppe Gast.

    Dann legst du für diese Gruppen einzeln die Zugriffsrechte fest und die Einstellungen etc. Der Benutzer bezieht seine Rechte dann ganz einfach aus seiner Gruppe.
    [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
    [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
    [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

    © Harald Schmidt

    Kommentar


    • #3
      Das ist alles soweit klar.
      Aber wie setze ich das Programmiertechnisch um?

      Das wird doch eine enorme If-Abfrage, oder?
      PHP-Code:
      if($gruppe == Admin)
      {
      include(
      "forum.inc.php");
      }
      if(
      $gruppe == Mod)
      {
      include(
      "forum.inc.php");
      }
      //usw 
      Oder wie soll das gehen?
      *winks*
      Gilbert
      ------------------------------------------------
      Hilfe für eine Vielzahl von Problemen!!!
      http://www.1st-rootserver.de/

      Kommentar


      • #4
        Setz doch beim Einloggen einfach eine Session-Variable die du dann entsprechend abfragst:
        PHP-Code:
        if ($_SESSION["gruppe"] == "admin") { zeige_verstecktes_forum 

        Kommentar


        • #5
          Die Var wird doch schon mitgeführt.

          aber um die Rechte zuermitteln muss ich doch trotzdem ein lange if-Abfrage machen, oder geht das auch anders.
          *winks*
          Gilbert
          ------------------------------------------------
          Hilfe für eine Vielzahl von Problemen!!!
          http://www.1st-rootserver.de/

          Kommentar


          • #6
            Na ja, bei vier oder fünf Gruppen ist die Abfrage ja auch nicht sooo lang... dennoch würde man wohl eher switch verwenden.

            Kommentar


            • #7
              Egal wie. Ich kann so ohne weiteres keine Neue Usergruppe hinzufügen und darum geht es in zweiter Linie.

              Wie kann ich die If-Abfrage so gestalten das wie dynamisch ist und das ich nicht soviele If schreiben muss.
              *winks*
              Gilbert
              ------------------------------------------------
              Hilfe für eine Vielzahl von Problemen!!!
              http://www.1st-rootserver.de/

              Kommentar


              • #8
                Nene, du solltest das natürlich schon dynamisch machen.
                Also die Zugriffsrechte in einer Tabelle speichern
                und dann die Zugriffsrechte für diese Gruppe auslesen.
                eine einfache if() Abfrage reicht dann:

                if($permission==1)
                {
                // zeige Forum
                }
                else
                {
                // access denied
                }
                [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
                [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
                [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

                © Harald Schmidt

                Kommentar


                • #9
                  Original geschrieben von Troublegum

                  if($permission==1)
                  {
                  // zeige Forum
                  }
                  else
                  {
                  // access denied
                  }
                  Aber damit habe ich doch nur ein Recht und nicht die Unterteilung nach alle User-Rechten.
                  *winks*
                  Gilbert
                  ------------------------------------------------
                  Hilfe für eine Vielzahl von Problemen!!!
                  http://www.1st-rootserver.de/

                  Kommentar


                  • #10
                    Wie sollte die Tabelle für die Recht aussehen?
                    Mach mal ein Vorschlag, Troublegum.
                    *winks*
                    Gilbert
                    ------------------------------------------------
                    Hilfe für eine Vielzahl von Problemen!!!
                    http://www.1st-rootserver.de/

                    Kommentar


                    • #11
                      also ich habe mir eine Klasse "User" gebaut,
                      welche automatisch das Login gegenüber der DB abgleicht.
                      Wenn das Script auth.php durchlaufen ist, gibt es ein Objetk $user, welches alle Informationen enthält

                      usergruppe, rechte, ...

                      Bei allen Aktionen, die von anderen Scripten gemacht werden heißt es dann immer

                      PHP-Code:
                      if($user->get_right("right_abc"))
                      {
                      // alles ok mache irgendwas
                      }else{
                      // kein Recht zu dieser Aktion

                      PS: ich such auch noch eine clevere DB-Struktur für Rechte in einem Baum, undzwar so:

                      Tabelle
                      ======
                      id
                      parent_id
                      ...

                      Soll so laufen:
                      Wenn ein User das Recht xyz auf ID=1 hat soll er automatisch dieses Recht auch für alle haben, die darunter hängen. So wie die Verzeichnissrechte bei WinNT

                      Geht das irgendwie ohne dabei die DB mit SQL Abfragen zu überschütten?
                      Zuletzt geändert von TBT; 01.10.2002, 12:28.
                      TBT

                      Die zwei wichtigsten Regeln für eine berufliche Karriere:
                      1. Verrate niemals alles was du weißt!


                      PHP 2 AllPatrizier II Browsergame

                      Kommentar


                      • #12
                        @TBT
                        kannst du mal die Klasse, die auth.php und eine Login-Seite als Anhang anhängen?
                        *winks*
                        Gilbert
                        ------------------------------------------------
                        Hilfe für eine Vielzahl von Problemen!!!
                        http://www.1st-rootserver.de/

                        Kommentar


                        • #13

                          PHP-Code:
                          // auth.php
                          session_start();
                          $query = new Query$DBinfotruefalse );
                          $action = isset( $HTTP_GET_VARS['action'] )?$HTTP_GET_VARS['action']:'';
                          if ( 
                          $action == "login" )
                              
                          $user = new User$query,
                                  
                          "login",
                                  isset( 
                          $HTTP_POST_VARS['login_user'] )?$HTTP_POST_VARS['login_user']:"",
                                  isset( 
                          $HTTP_POST_VARS['login_pass'] )?$HTTP_POST_VARS['login_pass']:"",
                                  
                          session_id() );
                          else
                              
                          $user = new User$query,
                                  
                          "return",
                                  isset( 
                          $HTTP_SESSION_VARS['user_id'] )?$HTTP_SESSION_VARS['user_id']:( isset( $HTTP_COOKIE_VARS['user_id'] )?$HTTP_COOKIE_VARS['user_id']:),
                                  isset( 
                          $HTTP_SESSION_VARS['user_pass'] )?$HTTP_SESSION_VARS['user_pass']:( isset( $HTTP_COOKIE_VARS['user_pass'] )?$HTTP_COOKIE_VARS['user_pass']:"" ),
                                  
                          session_id() ); 
                          // ab hier ist $user gültig, und kann gefragt werden 
                          PHP-Code:
                          // Klasse User
                          class User {
                              var 
                          $my_param;
                              var 
                          $sql1 "select .. from .. where "// SQL Abfrage für Userdaten
                              
                          function User( &$query$action ''$name$pass ""$stamp null$mail '' )
                              {
                                  
                          // DB Klasse übernehmen
                                  
                          $this->my_query = &$query;
                                  
                          // IP des Users holen
                                  
                          global $_SERVER;
                                  
                          $ip $_SERVER['REMOTE_ADDR'];
                                  if ( ( 
                          $ip == "127.0.0.1" ) && ( $_SERVER['HTTP_X_FORWARDED_FOR'] != "" ) )
                                      
                          $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
                                  
                          // Aktion wählen
                                  
                          if ( $action == "get" ) {
                                      
                          // nur Infos holen, kein login !
                                      
                          $result $this->my_query->select$this->sql1 " user_id=$name " );
                                      
                          // keine Cookies setzen oder Session eröffnen !
                                      
                          $this->set"protected");
                                  } elseif ( 
                          $action == "login" ) {
                                      
                          // Passwort crypten (simple zur Zeit)
                                      
                          $cpass crypt$pass );
                                      
                          // DB fragen
                                      
                          $result $this->my_query->select$this->sql1 " upper(user_nick)='" strtoupper$name ) . "' and user_pass='$cpass' " );
                                      if ( !
                          $this->my_query->rows ) {
                                          
                          // login ungültig => loggen + Gast aus DB holen
                                          // ...
                                      
                          } else {
                                          
                          // login gültig
                                          // ...
                                      

                                  } elseif ( 
                          $action == "return" ) {
                                      
                          // returning user
                                      
                          if ( $name != // 1 = GAST !
                                          
                          $result $this->my_query->select$this->sql1 " user_id=$name and user_pass='$pass' " );
                                      else
                                          
                          $result $this->my_query->select$this->sql1 " user_id=$name " );
                                      
                          // eine Zeile erhalten ?
                                      
                          if ( !$this->my_query->rows ) {
                                          
                          // login ungültig => loggen + Gast aus DB holen
                                          // ...
                                      
                          } else { 
                                          
                          // login gültig
                                          // ...
                                      

                                  } 
                                  
                          // setzen der Uservariablen auf die Werte der DB
                                  // ...
                                  
                          $this->set"ip"$ip );
                                  
                          $this->set"stamp"$stamp ); 
                                  
                          // ...
                                  
                          $this->set"last_action"$result[0][3] );
                                  
                          $this->set"nick"$result[0][4] );
                                  
                          $this->set"id"$result[0][5] );
                                  
                          $this->set"status"$result[0][6] ); 
                                  
                          // ...
                              

                              
                          // Eigenschaft speichern
                              
                          function set$param$value '' )
                              {
                                  
                          $this->my_param[$param] = $value;
                              } 
                              
                          // Eigenschaft ausgeben
                              
                          function get$param )
                              {
                                  if ( isset( 
                          $this->my_param[$param] ) )
                                      return 
                          $this->my_param[$param];
                                  return 
                          false;
                              } 
                              
                          // $user->explain() zeigt zu jedem Zeitpunkt alle Eigneschaften an,
                              // kann gut benutzt werden, um Fehler zu finden
                              
                          function explain()
                              {
                                  echo 
                          "<table><tr><th>Variable</th><th>Wert</th></tr>";
                                  
                          reset $this->my_param );
                                  while ( list( 
                          $key$value ) = each $this->my_param ) )
                                  echo 
                          "<tr><td>$key</td><td>$value</td></tr>";
                                  echo 
                          "</table>";
                              } 

                          TBT

                          Die zwei wichtigsten Regeln für eine berufliche Karriere:
                          1. Verrate niemals alles was du weißt!


                          PHP 2 AllPatrizier II Browsergame

                          Kommentar


                          • #14
                            @TBT
                            Hast du das so in deinem Forum umgesetzt?
                            *winks*
                            Gilbert
                            ------------------------------------------------
                            Hilfe für eine Vielzahl von Problemen!!!
                            http://www.1st-rootserver.de/

                            Kommentar


                            • #15
                              jup,

                              aber da ist das ganze noch nen bissel größer
                              da wird noch viel mehr gemacht, außerdem gibt es da eine Klasse "BoardUser" welche von der Standardklasse "User" ableitet.
                              Dadurch kann ich den "User" in mehreren Projekten verwenden,
                              und dann immer die Anpassung in einer abgeleiteten Klasse vornehmen.

                              PS: Das Board arbeitet fast ausschließlich mit Klassen
                              TBT

                              Die zwei wichtigsten Regeln für eine berufliche Karriere:
                              1. Verrate niemals alles was du weißt!


                              PHP 2 AllPatrizier II Browsergame

                              Kommentar

                              Lädt...
                              X