PHP: Zugriffsrechte

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • PHP: Zugriffsrechte

      Hallo.
      Ich arbeite derzeit an einer Galerie, die mit einem Gruppen-Script harmoniert.
      Nun ist die Frage, wie ich die Benutzerrechte (mySQL) speichern sollte.

      Sollte ich für jede Galerie eine neue Spalte in der Tabelle der Benutzerrechte machen?

      Beispiel:

      Quellcode

      1. CREATE TABLE `hphp0_grps`
      2. (`ID` INT PRIMARY KEY AUTO_INCREMENT,
      3. `name` VARCHAR(255),
      4. `password` VARCHAR(255),
      5. [...]
      6. `galerie0_canUploadPic` TINYINT(1) DEFAULT 0,
      7. `galerie0_canDeletePic` TINYINT(1) DEFAULT 0,
      8. [...]);


      Oder sollte ich in der Tabelle der Galerie die IDs der Benutzergruppen speichern, welche Bilder hochladen etc. können? Wenn ja, gibt es irgendeine Art Array-Variable?

      Falls ja und nein ( (-; :( Sollte ich dann eine Art Array selber schreiben, indem ich noch eine Tabelle anlegen, in denen die Benutzerrechte und -gruppen der Galerie gespeichert werden und daraus ein Array erstellen?

      Oder habt ihr eine ganz andere Idee?

      Bitte schnell um Antwort.

      Danke (-:
      theharlekin.de

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von stanny ()

    • Ich hab Benutzerrechte mit Bitweisen Verknüpfungen gelöst. Das ist zum einen übersichtlich und zum anderen extrem Platzsparend:

      Quellcode

      1. //config.php
      2. define ("P_LOGIN", 1);
      3. define ("P_UPLOAD", 2);
      4. define ("P_POSTNEWS", 4);
      5. define ("P_ADMIN", 8);


      P steht für Privileg, einfach damit ich weiß was Sache ist, wenn ich die Konstante irgendwo seh.
      P_LOGIN sagt dann darüber etwas aus, ob der User einloggen darf. Darf er einloggen, wird der Wert (1) gesetzt.
      Darf der User News posten ("P_POSTNEWS"), wird zusätzlich der Wert 4 gesetzt.
      Darf der User nichts hochladen, wird der Wert (2) für P_UPLOAD nicht gesetzt.
      Rechnen wir nun die Werte zusammen, kommen wir auf 1+4=5.
      Damit kann man dann später prüfen was der User darf.
      Jetzt wirst du dich evtl fragen: "Aber wartmal 2+3 ist auch 5". Stimmt schon, aber es gibt keinen Wert 3, genausowenig wie es einen Wert 5 gibt.

      Das Prüfen der Rechte geht ziemlich einfach:

      Quellcode

      1. if ($variable & P_UPLOAD) {
      2. doupload();
      3. }else{
      4. echo "Zugang verweigert";
      5. }
    • Das wird bei mir leider nicht realisierbar sein, da ich ein Basis-Script habe, welches mit beliebig vielen Plugins erweitert werden kann. Somit wäre es ein Problem, wenn das Galerie Script mit der Berechtigung "4" arbeitete und das Blog Script auch.

      edit: Ach, jetzt versteh ich, was du meinst, Mod.

      Jetzt wo ich länger drüber nachdenke, kommt mir meine Anfangslösung aber dennoch zunehmend gut vor. Und zwar, dass jede Galerie einfach ca. 5 (Erstellen, Löschen, Bearbeiten, Bild hochladen, Bild löschen) Spalten in der Benutzertabelle vornimmt.

      Dagegen spricht allerdings, dass die Tabelle der Benutzergruppen schnell sehr groß wird.
      Nehmen wir an, ich habe nur 5 Galerien, so hat die Tabelle der Benutzergruppen schon 25 Spalten mehr.

      Dafür spricht, dass ich die Abfrage durch diese Funktion vereinfachen und globalisieren kann.

      Quellcode

      1. function getusrright ($str) {
      2. if (!$_SESSION['logdIn'])
      3. return false;
      4. global $sql, $scriptnr;
      5. $sql->queryDb('SELECT `grpID` FROM `hphp'.$scriptnr.'_users` WHERE `ID` = '.$_SESSION['userID'].';');
      6. if (!$sql->getErr()) {
      7. $row = $sql->fetchRow();
      8. $sql->queryDb('SELECT `'.$str.'` FROM `hphp'.$scriptnr.'_groups` WHERE `ID` = '.$row[0].';');
      9. if (!$sql->getErr()) {
      10. $row = $sql->fetchRow();
      11. return (bool)$row[0];
      12. }
      13. }
      14. return -1;
      15. }
      Alles anzeigen


      Ist es nun ein Problem, Tabellen mit 100 oder sogar mehr Spalten zu haben (andere Plugins werden ja nach demselben Prinzip handeln)?

      edit:

      Ich habe mich nochmal mit Knolle unterhalten und tendiere nun stark zu MODs Variante.
      Allerdings werde ich wohl eine Tabelle für die Rechte nehmen:

      Quellcode

      1. CREATE TABLE `gal_usrright`
      2. (`grpID` INT,
      3. `canCrtGal` TINYINT(1) DEFAULT 0,
      4. `canDelGal` TINYINT(1) DEFAULT 0,
      5. `canEdiGal` TINYINT(1) DEFAULT 0,
      6. `canUplPic` TINYINT(1) DEFAULT 0,
      7. `canDelPic` TINYINT(1) DEFAULT 0,
      8. `canEdiPic` TINYINT(1) DEFAULT 0);

      So in etwa. Dann muss ich zwar für jedes Script eine Funktion zum Abfragen schreiben, aber egal. (-:

      Noch jemand Einwände?
      theharlekin.de

      Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von stanny ()