Rechtesystem

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

  • Rechtesystem

    So, dann mal wieder meiner einer !

    Ich habe ein Rechtesystem,
    welches an Gruppenrechte gekoppelt ist,
    und die Rechte in einer Baumstruktur vererbt.

    Dh. wenn der Zugriff für diese Gruppe auf einen
    Knoten im Baum verboten ist, sind gleichzeitig
    alle darunter liegenden Knoten verboten.

    Soweit so gut, doch wie kann man jetzt einbauen,
    daß ein User Mitglied in zwei bzw. mehreren Gruppen
    ist?

    Was gilt dann? Das Recht der Gruppe1 oder der Gruppe2 oder ...?

    Derzeit werden die Rechte durch Verbote implementiert,
    dh. alles ist erlaubt, solange kein Verbot besteht.

    Jemand ne Idee, wie man mehrere Gruppen da rein bringen kann ?
    TBT

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


    PHP 2 AllPatrizier II Browsergame

  • #2
    ich würde es so machen......

    tabelle rechte:
    - rechteid
    - rechtename

    tabelle gruppen:
    - gruppenid
    - gruppenname

    tabelle rechte+gruppen
    - rechteid
    - gruppenid

    tabelle user
    - userid
    - username
    - usw....

    tabelle user+gruppen
    - userid
    - gruppenid

    tabelle user+rechte
    - userid
    - rechteud


    eigentlich sollten alle tabellen für sich sprechen...

    die letzte letzte tabelle dient nur dazu, wenn einem user ein recht verliehen werden soll, wo er nicht direkt in einer gruppe ist. sonst müsstest du nur für das z.b. eine recht eine neue gruppe bilden.

    grundsätzlich gilt also, dass die rechte expliziet erlaubt werden müssen, und nicht verboten.

    vorteil: kommt eine neue area in das projekt, musst du dieses neue recht nicht bei jedem user 'ablehnen/verbieten', sondern brauchst es nur den geziehlten users freischalten oder den gruppen zuordnen.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      wenn du alles darfst, solang es nich explizit verboten is und user 1 zu gruppe 1 und gruppe 2 gehört hast du ein problem, wenn gruppe 2 im gegensatz zu gruppe 1 den bereich x nich betreten darf. aber das hast du ja glaub ich schon bemerkt *g*

      wäre es viel aufwand, es so abzuändern, dass alles verboten is, außer den sachen, die explizit erlaubt sind?
      das wäre für mich logischer und ich denke auch einfacher zu implementieren
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Original geschrieben von mrhappiness
        wäre es viel aufwand, es so abzuändern, dass alles verboten is, außer den sachen, die explizit erlaubt sind?
        mein post.

        Original geschrieben von mrhappiness
        das wäre für mich logischer und ich denke auch einfacher zu implementieren
        meine meinung.


        mein haus...
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Original geschrieben von mrhappiness
          wenn du alles darfst, solang es nich explizit verboten is und user 1 zu gruppe 1 und gruppe 2 gehört hast du ein problem, wenn gruppe 2 im gegensatz zu gruppe 1 den bereich x nich betreten darf. aber das hast du ja glaub ich schon bemerkt *g*
          das ist es ja gerade, dieses Problem habe ich auch,
          wenn ich vom Verbot als Standard ausgehe.
          Oder dann sagen, wenn in einer Gruppe erlaubt, kann er es sehen ?
          Das wird schwer mit einer SQL-Anweisung
          TBT

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


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #6
            Original geschrieben von TBT
            Oder dann sagen, wenn in einer Gruppe erlaubt, kann er es sehen ?
            ja
            Das wird schwer mit einer SQL-Anweisung
            aber leichter als andersrum denk ich

            du musst ja "nur" einen join machen für alle gruppen in denen ein user is und die werte in der spalte "erlaubt" aufsummieren. bei ner 0 für verbotenund ner 1 für erlaubt hast du ja entweder ne 0 oder was größeres stehen

            oder seh ich das problem grad nich?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              @happy:

              das wäre ja zu einfach

              es gibt noch eine zweite Ebene in der Abfrage, nämlich das vererben
              der Rechte innerhalb des Baumes.
              Dh. wenn der Menüpunkt 1.1 erlaubt ist, für Gruppe 1, so gilt
              das auch für 1.1.1 und 1.1.1.1 ...
              Das wird durch eine Summierung aller übergeordneten Menüpunkte
              erreicht.
              Da kommt dann das Problem, wie ich die Punkte 1.1.1 wieder
              explizit verbiete *g*

              ich schreib mal gleich ausführlicher
              TBT

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


              PHP 2 AllPatrizier II Browsergame

              Kommentar


              • #8
                verboten: NULL

                SELECT 1 + 2 + 3: 6

                SELECT 1 + 2 + NULL: NULL

                eventuell hilft dir das ja weiter, außer ich hätte noch was vom ausführlicheren wissen müssen
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  ich gehe mal von der Methode aus
                  "alles ist verboten, bis es erlaubt wird"
                  Code:
                                      Gruppe 1         Gruppe 2          Gruppe 1+2
                  =================================================================
                  menu 1              erlaubt          erlaubt               (e)
                  - menu 1.1            (e)            verboten              (e)
                  - - menu 1.1.1        (e)              (v)                 (e)
                  - menu 1.2            (e)              (e)                 (e)
                  menu 2                (v)            erlaubt               (e)
                  - menu 2.1            (v)              (e)                 (e)
                  Das soll mal die Ausgangssitation sein.
                  Die 4 Einträge ohne Klammern sind die Datensätze in
                  der Datenbank, alles andere soll sich durch
                  vererbte Rechte aus der DB ergeben - und natürlich
                  mit nur einer SQL-Abfrage zu erschlagen sein

                  Da ist zB. das Problem bei Gruppe 2 menu 1.1
                  was soll dort in den datensatz, das bei einer Berechnung
                  nichtmehr eine 1 für erlaubt rauskommt ?
                  TBT

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


                  PHP 2 AllPatrizier II Browsergame

                  Kommentar


                  • #10
                    Original geschrieben von TBT
                    Da ist zB. das Problem bei Gruppe 2 menu 1.1
                    was soll dort in den datensatz, das bei einer Berechnung
                    nichtmehr eine 1 für erlaubt rauskommt ?
                    hilft dir das mit NULL (s.o.)?
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      nicht wirklich, da SUM(...) von NULL-Werten 0 ergibt und nicht NULL
                      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
                        hmm... suboptimal

                        dann könntest du für verboten was aberwitzig negatives nehmen, -99999 z.b. oder du probierst ne weitere virtuelle spalte zurückliefern, in der ne 1 drinsteht, sobald NULL auftaucht

                        oder irgendwas ganz viel doll elegantes, was mir grad nich einfällt
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Original geschrieben von mrhappiness
                          oder irgendwas ganz viel doll elegantes, was mir grad nich einfällt
                          jetzt habe ich dich da, wo ich dich haben wollte

                          DIREKT NEHMEN MIR STEHEND
                          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
                            sag's doch gleich, dann wär ich sofort rübergekommen

                            mir gefällt übrigens meine varinate #2 besser (== weniger schlecht):
                            Code:
                            SELECT
                             ...,
                             SUM( IF(ISNULL(berechtigung), 1, 0))  erlaubt
                            (in der hoffnung, dass es tut)
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              das kann es nicht tun, da NULL bedeutet, das das Recht
                              des übergeordneten Menupunktes zu nehmen ist.
                              Da kann auch wieder NULL stehen, womit es noch eine
                              Ebene hoch geht ...

                              Ich weiß also garnicht, ob in diesem speziellen Fall
                              NULL erlaubt oder verboten heißt.
                              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