Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Anfängerfrage... Zugriffsrechte in Datenbank eintragen...

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Anfängerfrage... Zugriffsrechte in Datenbank eintragen...

    Hallo zusammen,

    ich habe eine Tabelle (User) und eine Tabelle (Kategorie)
    Nun möchte ich in die Tabelle "USER" Zugriffsrechte für die einzelnen Kategorien eintragen.

    So hab ich es mir gedacht.

    Ich habe die Spalte "rechte" in der Tabelle "USER".
    In dieser möchte ich die ID's der Kategorien eintragen, auf welcher der jeweilige User zugriff haben darf.

    Irgendwie ist das aber eine sehr unschöne Lösung... besonders da ich wohl auf große Probleme beim Auslesen der Rechte haben werde.

    Kann mir einer einen Tipp geben wie ich es besser machen kann?

    Ich danke euch!

  • #2
    Die umfassendste Lösung wäre wohl irgendwie ein RBAC zu implementieren. Wenn du aber nur verschiedene Kategorien hast, und du keine Hierarchien etc. hast ist das wohl aber ein Overkill.

    Je nachdem welches DBMS du verwendest (z.B. mit PostgreSql) kannst du die Rechtespalte als Array definieren. Oder wenn das nicht möglich ist (z.B. MySQL) ist es am einfachsten du machst eine zusätzliche Tabelle wo du UserID der Kategorie(ID) zuordnest. Ob ein User Zugriff auf eine Kategorie hast kannst du dann mit einem JOIN abfragen.

    Kommentar


    • #3
      Zitat von Tropi Beitrag anzeigen
      Je nachdem welches DBMS du verwendest (z.B. mit PostgreSql) kannst du die Rechtespalte als Array definieren.
      Selbst da würde ich zu Normalisierung raten.
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Vielen Dank für die schnelle Antwort!

        Zitat von Tropi Beitrag anzeigen
        ...am einfachsten du machst eine zusätzliche Tabelle wo du UserID der Kategorie(ID) zuordnest. Ob ein User Zugriff auf eine Kategorie hast kannst du dann mit einem JOIN abfragen.
        Ok, klingt "simpel" wie müssten die Tabelle ungefähr aussehen?

        Wenn ich ein User anlege, lege ich die ID des User's direkt mit in diese Tabelle und dann habe ich eine Spalte pro Kategorie in der ich dann mit 0 und 1 arbeiten kann?

        Kommentar


        • #5
          Nimm doch eine neue Tabelle "Gruppe" wo du dann Gruppen einrichtest. Jede Gruppe hat dann unterschiedliche Rechte auf Kategorien.
          Dem Benutzer ordnest du dann eine oder mehr Gruppen zu.

          Kommentar


          • #6
            Zitat von Fuel Beitrag anzeigen
            Nimm doch eine neue Tabelle "Gruppe" wo du dann Gruppen einrichtest. Jede Gruppe hat dann unterschiedliche Rechte auf Kategorien.
            Dem Benutzer ordnest du dann eine oder mehr Gruppen zu.
            Wäre eine Möglichkeit, aber es werden einige Kategorien werden und jeder User kann unterschiedlich auf die Kategorien zugreifen.
            So viele Gruppen kann ich gar nicht per Hand anlegen...

            Kommentar


            • #7
              Zitat von dummydan Beitrag anzeigen
              Vielen Dank für die schnelle Antwort!



              Ok, klingt "simpel" wie müssten die Tabelle ungefähr aussehen?

              Wenn ich ein User anlege, lege ich die ID des User's direkt mit in diese Tabelle und dann habe ich eine Spalte pro Kategorie in der ich dann mit 0 und 1 arbeiten kann?

              Zuordnungs-ID als Primärschlüssel | User-ID | Kategorie-ID


              Wenn ein User die Berechtigung für eine Kategorie hat schreibst du einfach die IDs in diese Tabelle. Wenn ein User nicht mit der Kategorie-ID in der Tabelle steht, hat er auch keine Berechtigung.
              [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
              [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

              Kommentar


              • #8
                Die Tabelle muss nur zwei Felder haben:
                - UserID
                - GruppenID

                dort trägst du dann Werte ein wie z.B.: 4/2, 4/6, 4/11 => also der User mit der ID 4 darf auf die Kategorien mit der ID 2, 6 und 11 zugreifen. Bitte nicht eine Spalte pro Kategorie! Du weißt ja womöglich noch gar nicht wieviele Kategorien es später geben wird.

                Kommentar


                • #9
                  Super, Danke, ich habs ich verstanden.

                  scheint wirklich ganz simple zu sein.

                  Könnt ihr mir noch einen Tipp geben dazu geben:
                  Die Kategorien werden bei dem Anlegen des Users per Checkbox ausgwählt.
                  Wie schreibe ich die Werte dann in eine solche Tabelle?

                  Meine Anfängerlösung hätte so ausgesehen, dass die Checkboxen die ID's in einer Variabel übergeben und ich diese dann in die Tabelle geschrieben hätte.

                  Aber die Checkboxen so auszuwerten dass ich die Werte in einer solchen Tabelle schreiben kann, sowas habe ich noch nicht gemacht. Ich muss die Variable dann ja irgendwie "teilen" oder so????

                  Kommentar


                  • #10
                    Du kannst den Checkboxen den gleichen Namen geben und mit [] dafür sorgen, das sie in PHP als Array behandelt werden. Vergleiche z.B. folgendes Minimalbeispiel:
                    PHP-Code:
                    <form method="post">
                    Kategorien:
                    foo <input type="checkbox" name="cat[]" value="5">
                    bar <input type="checkbox" name="cat[]" value="12">
                    blub <input type="checkbox" name="cat[]" value="15">
                    <input type="submit">
                    </form>
                    <?php
                    if (isset($_POST['cat'])) {
                        
                    $userid 5;
                        foreach (
                    $_POST['cat'] as $category) {
                            echo 
                    $userid ." => ".$category."<br>";
                        }
                    }
                    (Das Beispiel dient nur zur Demonstration. Bitte nicht 1:1 übernehmen.)

                    Die UserID müsstest du natürlich irgendwoher dynamisch holen. Wie du die Werte dann tatsächlich in eine Tabelle bekommst findest du in jedem SQL-Einsteigertutorial.

                    Kommentar


                    • #11
                      Ok, nochmal vielen Dank.

                      Den Rest werde ich hoffentlich alleine schaffen

                      Weiss noch nicht so ganz wie ich es mache, dass für jeden Wert im Array eine neue Zeile in der Tabelle erstellt wird... aber ich werde mich mal einlesen...

                      Kommentar

                      Lädt...
                      X