Announcement

Collapse
No announcement yet.

Dynamisches Rechtesystem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dynamisches Rechtesystem

    Hallo Zusammen.

    Ich versuche mich derzeit an einen CMS System welches auf Modulen aufgebaut werden soll wo der Anwender selbst entscheiden kann was er benutzen möchte und was nicht. So ähnliches wie bei phpnuke und Postnuke.

    Nun brauche ich genau für sowas ein Dynamisches Rechtesystem.

    D.h ein Modul hat best funktionen die nur aufgeführt werden dürfen wenn der user ausser der Admin dieses Recht auch besitzen.

    Wird ein Modul deinstalliert, sollen auch die Rechte für dieses Modul aus der Datenbank entfernt, umgekehrt dann hinzugefügt werden.

    Genauso sollen die neuen Rechte dann auch in der Configuration für die Benutzergruppen mit angezeigt werden oder ebend nicht, jenachdem ob ein Modul installiert worden ist oder deinstalliert wurde.

    Wer kann mir bei diesem Problem ein bischen auf die Sprünge helfen ?

    Danke in vorraus

  • #2
    Das ist recht einfach zu lösen, indem Du zwei extra Tabellen führst für Modul-Rechte und User-Rechte.
    Was ein User dann darf bekommst Du über einen JOIN der beiden Tabellen über die Rechte

    Comment


    • #3
      Beispiel:

      also du hast 4 menus, die variabel vergeben werden sollen...

      1.) Newsposten
      2.) Downloads hinzufügen
      3.) Links hinzufügen
      4.) Member hinzufügen
      <pre>
      dies stellst du nun so an:

      zuerst vergibst du 5 ränge (für jeden eins und ein admin (kannst aber auch variiren)

      Newsposten hat rank 1
      downloads rank 2
      Links... 3
      Member hinzufügen... 4
      admin... 10 (um weitere menus später ohne probleme hinzuzufügen)

      nun musst du entscheiden, wer alles was verändern darf...
      am besten geht das in einem punktesystem.
      die ersten 2 zahlen für den rank des links und die 2.n 2 zahlen für den rank, der es auchnoch ausführen darf...

      $news = 0103;
      $downloads = 0203;
      $links = 0303;
      $member = 0404;
      $admin = 9999;

      mit der 2. zahl, gibst du an, wieviele punkte man benötigt, damit mann diese funktion auch verwenden darf...

      dass du jedem nutzer die ränge zuteilen musst, ist dir dann sicherlich klar =D
      wie du das machst, ist die überlassen...

      nun gehst du mit einer schleife durch die einelnen menüfolgen durch...

      if (($member_rank == substr($news, 0, -2))or(substr($news, 2))){
      'zeige news_posten-Link'
      }
      if (($member_rank == substr($downloads, 0, -2))or(substr($news, 2))){
      'zeige downloads_adden-Link'
      }
      if (($member_rank == substr($links, 0, -2))or(substr($news, 2))){
      'zeige links_adden-Link'
      }
      if (($member_rank == substr($member, 0, -2))or(substr($news, 2))){
      'zeige member_adden-Link'
      }
      if (($member_rank == substr($admin, 0, -2))or(substr($news, 2))){
      'zeige alle Links'
      }

      ich hoffe ich konnte dir hiermit helfen...

      mfG Nooa
      </pre&gt

      Comment


      • #4
        ich finds so einfacher und eleganter:

        1.) Newsposten Rechtelevel: 1
        2.) Downloads hinzufügen Rechtelevel: 2
        3.) Links hinzufügen Rechtelevel: 4
        4.) Member hinzufügen Rechtelevel: 8
        usw .... 16,32,64,128 ....
        wie beim CS - Adminmod halt ;-)

        Wenn nun ein User den die Rechte zu 1, 3 und 4 haben soll, addierst Du einfach die Rechtelevel:
        1 + 4 + 8 = 13

        die 13 hinterlegst Du bei dem User.

        Das hat den Vorteil, dass die Rechte des Users nicht hierarchisch aufgebaut sein müssen, sondern auch mal eine "Lücke" da sein darf.

        Am Anfang jeder zu überprüfenden Funktion fügst Du ein:
        $benoetigterRechteLevel = 8 (für "Member hinzufügen")

        und prüfst dann über einen Aufruf der unten angefügten, vorher einmal includeten function (in $loginrechte sind die indiv. Rechte des Users gespeichert, hier also 13):

        if (checkrights($benoetigterRechteLevel,$loginRechte) )
        ........

        hier die funktion zur Prüfung der Rechte:
        <?php

        function checkrights($level, $userlevel)
        {

        for ($i=7; $i>=0; $i--)
        {
        $binaer = pow(2, $i);

        if ($binaer <= $userlevel)
        {
        $userlevel = $userlevel - $binaer;
        $rechte[] = $binaer;
        }
        }

        if (in_array($level, $rechte))
        {
        return true;
        }
        else
        {
        return false;
        }
        }
        ?&gt

        Comment

        Working...
        X