Rechtesys für Webseite

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

  • Rechtesys für Webseite

    hat beim ersten mal irgendwie nichts eingetragen

    Hallo,

    ich bastel grad an einer kleinen Rechteverwaltung für Benutzer einer kleinen Webanwendung.
    Nun möchte ich nicht, dass jeder Zugriff auf alle Bereiche der Webseite hat, sondern nur auf die für ihn bestimmte Seiten.
    Dafür hab ich mir nun mal folgendes Ausgedacht.
    Meine Frage, ist das alles völliger Quark oder hat jemand einen Verbesserungsvorschlag?

    Code:
    DB Tabelle
    benutzer_rechte
    CREATE TABLE IF NOT EXISTS `benutzer_rechte` (
      `userid` int(30) unsigned NOT NULL,
      `modul1` smallint(1) NOT NULL default '0',
      `modul2` smallint(1) NOT NULL default '0',
      KEY `userid` (`userid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
    0 wenn kein Recht
    1 wenn Zutritt genehmigt

    PHP-Code:
    //Funktion
    function check_nutzerrechte($user_rechte$modul) {
        if(isset(
    $user_rechte[$modul]) && $user_rechte[$modul] == TRUE) {
        
    $data TRUE;
        }
        else {
        
    $data FALSE;
        }
    return 
    $data;
    }

    //Die beiden Seiten stehen für jeden zur Verfügung
    $_SESSION['user_rechte']['startseite'] = 1;
    $_SESSION['user_rechte']['login'] = 1;

    //Abfrage nach erfolgreichem login
    $sql mysql_query("SELECT... ");
    $row mysql_fetch_array($sql) ;
    $_SESSION['user_rechte']['modul1'] = $row['modul1'];
    $_SESSION['user_rechte']['modul2'] = $row['modul2'];

    //$_GET['modul'] wird von der URL übergeben
    //www.seite.de/index.php?modul=modul1

    //Kontrolle
    $check check_nutzerrechte($_SESSION['user_rechte'], $_GET['modul']);
    if(
    $check == TRUE) {
    require_once(
    'modul.php');
    }
    else {
    echo 
    'Du hast leider keine Berechtigung für dieses Modul';

    Zuletzt geändert von gourmet; 07.08.2008, 21:46.

  • #2
    Naja, problematisch wird, wenn du weitere Module hinzufügst, da du die Tabelle jedes mal um eine Spalte erweitern musst. Da ist eine Aufteilung auf mehrere Tabellen deutlich sinnvoller.

    Kommentar


    • #3
      stimmt es ist zu statisch, ich werde mir morgen weitere gedanken dazu machen.

      Kommentar


      • #4
        tbl_user
        user_id
        user_name
        user_group_id
        user_status #user, mod, admin

        tbl_group
        group_id
        group_name

        tbl_modul
        modul_id
        modul_name
        [..]

        tbl_rights
        user_id
        group_id
        modul_id

        #wenn user_id leer .. gucke nach ob group_id gefüllt ist

        wäre EIN ansatz
        Gruß
        Uzu

        private Homepage

        Kommentar


        • #5
          Hallo UzumakiNaruto,

          ich wollte es eigentlich nicht so aufwendig machen und schon garnicht mit Gruppen, aber ich komme wahrscheinlich nicht drum herum und es ist am Ende wahrscheinlich doch die bessere Lösung

          Ich habe die Tabellen mal ein wenig verändert, ist jetzt erst einmal alles blanke theorie.

          tbl_user
          user_id
          group_id
          user_name
          ...

          tbl_group
          group_id
          group_name

          tbl_modul
          modul_id
          modul_name
          group_id

          tbl_rights
          user_id
          modul_id

          Abfrage: wenn ist modul, dann zutritt, wenn nicht eben nicht

          Kommentar


          • #6
            Ich würde es evtl. mit einem Bitfeld realisieren.

            Also z.B.

            001101100

            Eine 1 heißt zugriff, eine null heißt kein zugriff

            in die datenbank wird dann die Dezimalzahl geschrieben

            001101100 = 108
            "Nicht jeder Mensch kann und soll Programmieren[...]".

            Kommentar


            • #7
              Du kannst die Gruppen auch weg lassen, die Tabellenstruktur bleibt so aufgedröselt.

              Ich würde es evtl. mit einem Bitfeld realisieren.
              Ist genau das gleiche wie die einzelnen Spalten, wird problematisch bei neuen Modulen, wenn der Wertebereich dann nicht mehr ausreicht.

              Kommentar


              • #8
                Original geschrieben von PHP-Desaster
                Du kannst die Gruppen auch weg lassen, die Tabellenstruktur bleibt so aufgedröselt.

                Ist genau das gleiche wie die einzelnen Spalten, wird problematisch bei neuen Modulen, wenn der Wertebereich dann nicht mehr ausreicht.
                Er sagte kleine Rechteverwaltung - Wertebereich sollte somit ausreichen .

                Aber sonst hast du natürlich völlig recht
                "Nicht jeder Mensch kann und soll Programmieren[...]".

                Kommentar


                • #9
                  Original geschrieben von gourmet
                  Hallo UzumakiNaruto,

                  ich wollte es eigentlich nicht so aufwendig machen und schon garnicht mit Gruppen, aber ich komme wahrscheinlich nicht drum herum und es ist am Ende wahrscheinlich doch die bessere Lösung

                  Abfrage: wenn ist modul, dann zutritt, wenn nicht eben nicht
                  wie php-desaster schon erwähnte .. du kannst die gruppen auch weglassen (dann natürlich auch user_group_id, usw.)

                  tbl_rights reicht ja auch mit user_id und modul_id aus.

                  wird dann natürlich eine recht lange tabelle wenn es viele leute werden und vür den admin ein aufwand der enorm ist (bsp. täglich 20 neue benutzer).

                  da wäre evtl. zu überlegen ob es nicht schon ausreichen würde nach benutzerstatus zu selectieren.
                  sprich user, mod, admin.

                  tbl_modul
                  [...]
                  modul_rights #101 = user, 102 = mod, 103 = admin

                  tbl_user
                  user_rights = 101

                  user_rights <= modul_rights
                  admin (103) <= 101, 102, 103
                  mod(102) <= 101, 102
                  user(101) <= 101
                  Gruß
                  Uzu

                  private Homepage

                  Kommentar


                  • #10
                    da wäre evtl. zu überlegen ob es nicht schon ausreichen würde nach benutzerstatus zu selectieren.
                    sprich user, mod, admin.
                    Verlagert das Problem nur. Wenn du mehrere Benutzerstati hinzugefügst, musst du entsprechend diese modul_rights anpassen. Es scheint mir eh ein wenig willkürlich, die Werte 101=user, 102=mod, 103=admin zu vergeben...

                    Kommentar


                    • #11
                      Original geschrieben von gourmet

                      tbl_user
                      user_id
                      group_id
                      user_name
                      ...

                      tbl_group
                      group_id
                      group_name

                      tbl_modul
                      modul_id
                      modul_name
                      group_id

                      tbl_rights
                      user_id
                      modul_id
                      Gruppen sind ok und werden jetzt fest eingeplant

                      bin gerade erst von arbeit gekommen und unterwegs ist mir eingefallen das das so ^^(tbl_modul) auch nicht geht
                      denn es kann ja sein das verschiedene Gruppen auf ein und das selbe modul zugreifen können.
                      ich werde jetzt mal eben ne stunde darüber nachdenken und dann was dazu posten.

                      Kommentar


                      • #12
                        Darum hat UzumakiNaruto das ja auch so gemacht:
                        tbl_modul
                        modul_id
                        modul_name
                        [..]

                        tbl_rights
                        user_id
                        group_id
                        modul_id

                        #wenn user_id leer .. gucke nach ob group_id gefüllt ist
                        .

                        Kommentar


                        • #13
                          ist schon richtig, aber ich möchte die rechte nicht am user festmachen, sondern an den gruppen, wenn ich denn schon welche habe

                          meine tbl sehen jetzt so aus, also nicht viel anders

                          tbl_user
                          user_id
                          group_id
                          user_name
                          ...

                          tbl_group
                          group_id
                          group_name

                          tbl_modul
                          modul_id
                          modul_name

                          tbl_modul_groups
                          mg_id
                          modul_id
                          group_id

                          nun muss ich "nur" noch tbl_user, tbl_modul und tbl_modul_groups mit nem join zusammenbasteln

                          Kommentar


                          • #14
                            Original geschrieben von gourmet
                            ist schon richtig, aber ich möchte die rechte nicht am user festmachen, sondern an den gruppen, wenn ich denn schon welche habe

                            meine tbl sehen jetzt so aus, also nicht viel anders

                            tbl_user
                            user_id
                            group_id
                            user_name
                            ...

                            tbl_group
                            group_id
                            group_name

                            tbl_modul
                            modul_id
                            modul_name

                            tbl_modul_groups
                            mg_id
                            modul_id
                            group_id

                            nun muss ich "nur" noch tbl_user, tbl_modul und tbl_modul_groups mit nem join zusammenbasteln
                            mg_id brauchst du nicht wenn du modul_id und group_id als zusammenhängenden primärschlüssel erstellst

                            beim anmelden wirst du ja sicherlich alle relevanten daten in einer session speichern, da kannste dann auch die user_group_id abspeichern.

                            dann wirst du sicherlich eine navigation bauen in denen alle module angezeigt werden zu denen der user die berechtigung hat.

                            Code:
                            SELECT m.*
                            FROM tbl_modul m
                            WHERE tbl_modul_group.group_id = $_SESSION['group_id']
                            AND tbl_modul_group.modul_id = m.group_id;
                            Gruß
                            Uzu

                            private Homepage

                            Kommentar


                            • #15
                              mein getesteter join , vielleicht kann ja ein joinprofi mal drüber gucken, denn ich bin nicht der joinprofi. immer dieses inner, outer, left, right,drunter, drüber join

                              PHP-Code:
                              $sql "SELECT t1.modul_id, t1.group_id, t2.group_id, t3.modul_id, t3.modul_name
                              FROM tbl_modul_groups t1 INNER JOIN tbl_user t2 LEFT JOIN tbl_modul t3
                              ON t1.group_id = t2.group_id WHERE t3.modul_id = t1.modul_id"

                              Original geschrieben von UzumakiNaruto
                              mg_id brauchst du nicht wenn du modul_id und group_id als zusammenhängenden primärschlüssel erstellst

                              beim anmelden wirst du ja sicherlich alle relevanten daten in einer session speichern, da kannste dann auch die user_group_id abspeichern.
                              mg_id ist weg, das war mir neu mit den zusammenhängenden primärschlüsseln, wieder was gelernt .

                              aber was ich nicht verstehe ist die user_group_id, ist das die group_id?
                              Zuletzt geändert von gourmet; 08.08.2008, 21:00.

                              Kommentar

                              Lädt...
                              X