Hallo,
mal wieder stehe ich vor einem kleinen Problem. Ich möchte gerne ein Rechtesystem entwickeln, wobei der User mehrere Möglichkeiten hat an ein gewisses Recht zu kommen:
Die aktuelle Tabellenstruktur sieht dafür momentan so aus:
{colsp=3}
rechte
rechteid|name|...
{colsp=3}
user
userid|name|...
{colsp=3}
user_rechte
userid|rechteid|wert (0,1)
{colsp=3}
usergruppen
gruppenid|name|...
{colsp=2}
usergruppen_user
gruppenid|userid
{colsp=2}
usergruppen_rechte
gruppenid|rechteid
Nun möchte ich zu einem bestimmten User alle Rechte auslesen die er hat (also entweder durch eine Benutzergruppe oder durch einen Eintrag mit wert = 1 in der user_rechte tabelle), ohne dass die die ihm aberkannt wurden (durch einen Eintrag mit wert = 0 in der user_rechte tabelle) mitgezählt werden.
Mein Ansatz war nun, erst mit einer Abfrage alle Rechte zu selektieren die er über eine Benutzergruppe hat und diese mittels eines UNION zusammenzuführen mit allen die ihm speziell anerkannt wurden. Dies würde dann also folgendermaßen aussehen:
Nun sind aber auch die Rechte noch im Result enthalten, welche dem User durch einen Eintrag mit wert = 0 in user_rechte aberkannt wurden.
Ausserdem finde ich diese UNION-Konstruktion nicht besonders schön, stehe aber zur Zeit ziehmlich auf dem Schlauch, wie ich das am besten anpacken kann und wäre daher für jede Hilfe dankbar.
Vielen Dank im vorraus für eure Hilfe,
mfg
Gsus
mal wieder stehe ich vor einem kleinen Problem. Ich möchte gerne ein Rechtesystem entwickeln, wobei der User mehrere Möglichkeiten hat an ein gewisses Recht zu kommen:
- Ein User ist Mitglied einer Usergruppe, welche bestimmte Standard-Rechte hat
- Ein User hat ein spezielles Recht, oder ihm fehlt ein spezielles Recht
Die aktuelle Tabellenstruktur sieht dafür momentan so aus:
rechteid|name|...
userid|name|...
userid|rechteid|wert (0,1)
gruppenid|name|...
gruppenid|userid
gruppenid|rechteid
Nun möchte ich zu einem bestimmten User alle Rechte auslesen die er hat (also entweder durch eine Benutzergruppe oder durch einen Eintrag mit wert = 1 in der user_rechte tabelle), ohne dass die die ihm aberkannt wurden (durch einen Eintrag mit wert = 0 in der user_rechte tabelle) mitgezählt werden.
Mein Ansatz war nun, erst mit einer Abfrage alle Rechte zu selektieren die er über eine Benutzergruppe hat und diese mittels eines UNION zusammenzuführen mit allen die ihm speziell anerkannt wurden. Dies würde dann also folgendermaßen aussehen:
Code:
SELECT *
FROM rechte
LEFT JOIN usergruppen_rechte USING (rechteid)
LEFT JOIN usergruppen_user USING (gruppenid)
WHERE userid = 1
UNION
SELECT *
FROM rechte
LEFT JOIN user_rechte USING (rechteid)
WHERE userid = 1
AND wert = 1
Nun sind aber auch die Rechte noch im Result enthalten, welche dem User durch einen Eintrag mit wert = 0 in user_rechte aberkannt wurden.
Ausserdem finde ich diese UNION-Konstruktion nicht besonders schön, stehe aber zur Zeit ziehmlich auf dem Schlauch, wie ich das am besten anpacken kann und wäre daher für jede Hilfe dankbar.
Vielen Dank im vorraus für eure Hilfe,
mfg
Gsus