TS: Rechteverwaltung

Beitrag lesen

Hallo und guten Tag,

ich habe eine Frage zum Datenbankmodell und den möglichen Abfragen für meine kleine Rechteverwaltung. Für die reine User<->Rechteverwaltung funktioniert das Modell schon gut, soll aber nun auch für Gruppen erweitert werden. Die User können also Mitglieder in Gruppen werden, die dann schon gewisse Grundrechte haben.

DBMS = MySQL Engine = InnoDB

Die Rechte stehen in "rights". Die User haben ihren Stammeintrag in "user". Erweiterte Userdaten stehen in "user_address" (sind hier aber nebensächlich) Die Gruppenzugehörigkeit user<->gruppe steht in "groups"

  

user                                                 rights
==========                                           ==========
id --+---------------------------------------------> id_user (fk)
     |                                        +----> id_groups (fk) 
     |                                        |      project
     |                                        |      module
     |                 groups                 |      function
     |                 ==========             |               
     |                 id --------------------+ 
     +---------------> id_user (fk)

.  

Bisher funktioniert das so: Ist der User angemeldet (authentifiziert + login), dann werden über die Usernummer alle Rechte zum aktuellen Projekt, dem aktuellen Modul und der gewünschten Funktion aus der Tabelle geholt und verdichtet.

Verdichtet bedeutet:
hat der User schon das Recht "all" auf einem Projekt, hat er automatisch auch alle Rechte für alle Module darin und alle Funktionen des Moduls.

Hat der User z.B. nur das Recht "use" auf ein Projekt, das Recht "use" auf ein Modul, dann benötigt er auch explizit das Recht "use" für eine Funktion, um diese nutzen zu dürfen.

Ich möchte diese Abfragelogik für die Rechtetebelle möglichst nicht viel ändern.

Bei Abfrage, welche Rechte der User hat, muss ich vorher auch noch die Gruppenzugehörigkeit des Users erfragen und dann z.B. mit einem "where id_user = $user and $id_groups in ..."

Wie muss mein (...) lauten, damit es klappt?

Oder sollte ich das ganz anders machen?

Grüße
TS

--
es wachse der Freifunk
http://freifunk-oberharz.de

akzeptierte Antworten