So, ich muss nochmal diesen älteren Thread hochholen, da ich eigentlich genau so eine Tabellenstruktur mir erdacht habe, wie POD. Meine Frage ist jetzt, wie ich das ganze in PHP auswerte, ich habe es mir so gedacht:
1. Ein User loggt sich ein
2. Die Rechte der Gruppe(n) des Users werden ausgelesen und in einer Session gespeichert (sagen wir: $_SESSION['RIGHTS'])
3. Die Rechte des einzelnen Users werden asugelesen und in der selben Session gespeichert, doppelte Einträge überschrieben
4. Bei jedem Modul o.ä. wird erst etwas in der Art abgefragt:
if($_SESSION['RIGHTS']['news_write'])..., d.h. $_SESSION ['RIGHTS'] müsste so in etwa aussehen:
Das ist bisher nicht sonderlich das Problem, ich habe aber zwei einzelne SQL Queries, einmal für die Gruppen Rights und einmal für die User Rights:
Und so werden mir ja (leider) nur die Rechte aufgelistet, die ein User auch hat, aber ich möchte z.B. im Bereich, wo ich Usern Rechte zuordnen kann, erst alle Vorhandenen Rechte auflisten und dann die des Users markieren. Das würde heißen, ich müsste eine weitere Query machen.
Könnte man nicht gleich in einer Query folgendes abfragen:
a) alle Rechte der Gruppe(n) des Users
b) alle Rechte des Users
c) alle Rechte, die er nicht hat
d) Format sollte dann sein:
Recht | allowed
string | bool
d.h. ich könnte mit eine IF abfrage in der Query ein allowed hinzufügen, dass dann auf true oder false setzt.
Ich hatte das ganze schonmal recht weit, aber sobald man eine WHERE abfrage eingesetzt hat, wurden nur noch die Rechte angezeigt, die ein User auch wirklich hat.
Danke für jede Hilfe.
1. Ein User loggt sich ein
2. Die Rechte der Gruppe(n) des Users werden ausgelesen und in einer Session gespeichert (sagen wir: $_SESSION['RIGHTS'])
3. Die Rechte des einzelnen Users werden asugelesen und in der selben Session gespeichert, doppelte Einträge überschrieben
4. Bei jedem Modul o.ä. wird erst etwas in der Art abgefragt:
if($_SESSION['RIGHTS']['news_write'])..., d.h. $_SESSION ['RIGHTS'] müsste so in etwa aussehen:
PHP-Code:
Array(
'news_write' => true,
'news_edit' => true,
...
)
PHP-Code:
### Rechte des Users mit der ID 1 ###
SELECT t.`ID` as `User_ID`, r.`right`
FROM `team` t
LEFT JOIN `user_rights` ur
ON ur.`user_id` = t.`ID`
LEFT JOIN `rights` r
ON r.`right_id` = ur.`right_id`
WHERE `User_ID` = 1
GROUP BY `right`
### Rechte der Gruppe(n) des Users mit der ID 1 ###
SELECT t.`ID` AS `User_ID` , r.`right`
FROM `team` t
LEFT JOIN `group_user` gu
ON gu.`user_id` = t.`ID`
LEFT JOIN `groups` g ON
g.`group_id` = gu.`group_id`
LEFT JOIN `group_rights` gr
ON gr.`group_id` = gu.`group_id`
LEFT JOIN `rights` r
ON r.`right_id` = gr.`right_id`
WHERE `User_ID` =1
GROUP BY `right`
Und so werden mir ja (leider) nur die Rechte aufgelistet, die ein User auch hat, aber ich möchte z.B. im Bereich, wo ich Usern Rechte zuordnen kann, erst alle Vorhandenen Rechte auflisten und dann die des Users markieren. Das würde heißen, ich müsste eine weitere Query machen.
Könnte man nicht gleich in einer Query folgendes abfragen:
a) alle Rechte der Gruppe(n) des Users
b) alle Rechte des Users
c) alle Rechte, die er nicht hat
d) Format sollte dann sein:
Recht | allowed
string | bool
d.h. ich könnte mit eine IF abfrage in der Query ein allowed hinzufügen, dass dann auf true oder false setzt.
Ich hatte das ganze schonmal recht weit, aber sobald man eine WHERE abfrage eingesetzt hat, wurden nur noch die Rechte angezeigt, die ein User auch wirklich hat.
Danke für jede Hilfe.
Kommentar