MySQL-Abfrage für Rechtetabelle

reze

Grünschnabel
Ich habe seit Tagen eine Denk-Blockade, daher meine Bitte um Hilfe:

Es geht um das Recht Zugriff (acc) mit Werten 101 (ja) oder 901 (nein).

Dazu folgende Tabelle:

modul0, submodul1, submodul2, rechte_key, rechte_value

Folgendes soll z.B. möglichst in einer einzigen Abfrage lösbar sein:
LEER, 2001, LEER, acc, 901 - alle sperren mit beliebigem modul0 + submodul2 und submodul1 = 2001

S1A100, 2001, LEER, acc, 101 - trotzdem alle freigeben, in S1A100, 2001 mit beliebigem submodul2.

Vielleicht hat jemand einen Ansatz -
ursprünglich wollte ich jede Rechte-Kombination einzeln speichern, zunächst per Sessions, dann per Datenbank - nun bei knapp 10.000 Sätzen ist keine gute Lösung mehr.

Die meisten User erhalten weitreichenden Zugriff, also z.B. modul0 + submodul1= leer und acc = 101, wobei trotzdem einzelne Module ausgeschlossen werden müssen (können).

Später gibt es noch weitere Kombinationen zu diesen 3 Modul-Angaben, daher muss mir nun eine Lösung einfallen / eingefallen werden :D

Bestenfalls gibt es eine Query, die immer 1 zutreffenden Satz ergibt:
Zugriff JA oder NEIN - egal, ob hier im speziellen der Zugriff erlaubt ist, oder z.B. der Zugriff global erlaubt ist, aber HIER nicht.

Die 3 Angaben zum Modul kommen immer direkt aus dem Programm, sobald der User ein Modul betreten will.

Danke + Viele Grüße

Frank
 
Kannst du mal ein Datenbeispiel machen mit Tabellen machen?
Ich versteh trotz meinen guten SQL-Kentnnissen absolut nicht was du willst.
 
zunächst trotzdem Danke für das Interesse!

Hier ein Beispiel:

Betreten werden sollen Kontakte (S1A100) - Basisdaten (2001) im Modus (B)earbeiten

AM0 = Name des Moduls, z.B. Kontakte = S1A100
AM1 = Untermodul, z.B. Übersicht = 1001 oder ab 2001 = Inhalt
AM2 = Aufruftyp, z.B. L = Liste, N = Neu oder B = Bearbeiten
ctr_k = hier IMMER acc (Name für das Recht "Modulberechtigung")
ctr_v = 101 = erlaubt / 901 = gesperrt

Falls ein Wert AM0, AM1, oder AM2 LEER oder "0" ist (je nach SQL-Spaltentyp), soll die Sperre oder Freigabe eben ALLE betreffen - also leeres AM0 bedeutet ALLE Module sind betroffen. Sofern das aktuelle Modul nicht einzeln erlaubt oder gesperrt ist.

ID, AM0, AM1, AM2, ctr_k, ctr_v

1 - S1A100 - 2001 - B - acc - 101
2 - S1A100 - 2001 - N - acc - 901
Ergebnis = Zugriff erlaubt

ID, AM0, AM1, AM2, ctr_k, ctr_v
1 - S1A100 - 2001 - B - acc - 901
2 - S1A100 - 2001 - N - acc - 101
Ergebnis = Zugriff gesperrt

ID, AM0, AM1, AM2, ctr_k, ctr_v
1 - S1A100 - LEER - LEER - acc - 101
2 - S1A100 - 2001 - N - acc - 901
Ergebnis = Zugriff erlaubt

ID, AM0, AM1, AM2, ctr_k, ctr_v
1 - LEER - LEER - LEER - acc - 101
2 - S1A100 - 2001 - B - acc - 901
Ergebnis = Zugriff gesperrt (alles andere erlaubt)

ID, AM0, AM1, AM2, ctr_k, ctr_v
1 - LEER - LEER - LEER - acc - 101
2 - S1A100 - LEER - B - acc - 901 ODER
2 - S1A100 - LEER - LEER - acc - 901
Ergebnis = Zugriff gesperrt (alles andere erlaubt)

Es geht darum, eben NICHT jede Modul-Kombination speichern zu müssen, hat jemand vollen Zugriff auf jede mögliche Kombination aus AM0, AM1 und AM2 soll 1 Datensatz reichen.

Ich freue mich über jedem Hinweis - gerne kann ich auch ein Dump erstellen, allerdings ist die Realität leider noch ein Stückchen komplexer.
 
Zurück