Ich verwende zwei Tabellen um Berechtigungsgruppen abzubilden
(Ja, das ist TBTs menu_menu)
Ich suche jetzt eine Möglichkeit, alle Berechtigungsgruppen, die ein Benutzer hat, auszulesen inklusive der übergeordneten Berechtigungen)
Beispiel:
Ich habe einen Standardbenutzer, der HR-Daten anzeigen darf und volle Entwicklerberechtigungen hat, für diesen Benutzer würde ich gerne die IDs 1, 4, 5, 6, 7, 8, 9 haben.
Das ist ein einfaches
Das Sortieren brauche ich, da ich später den Berechtigungsgruppen Berechtigungen zuweise und die Möglichkeit haben will, einer untergeordneten Gruppe weitere Berechtigungen zu geben, aber auch Berechtigungen zu entziehen.
Wenn ich jetzt die Enticklerberechtigungen abschalten will, setze ich group_active für die Gruppe mit ID 5 (DEVELOP) auf 0 und möchte demnach nur noch 1, 4, 8, 9 haben.
Erweitere ich meinSELECT und schließe Berechtigungsgruppen mit group-active = 0 aus, dann bekomme ich allerdings 1, 4, 6, 7, 8, 9.
Kann ich das irgendwie mit einer Abfrage abhandeln oder muss ich da mit PHP ran?
Code:
CREATE TABLE permission_group ( group_id int(10) unsigned NOT NULL auto_increment, group_parent_id int(10) unsigned NOT NULL default '0', group_name varchar(255) NOT NULL default '', group_active int(1) unsigned NOT NULL default '1', group_description text NOT NULL, PRIMARY KEY (group_id), UNIQUE KEY group_name_parent (group_parent_id,group_name), KEY group_parent_id (group_parent_id), KEY group_name (group_name) ); INSERT INTO permission_group VALUES (1, 0, 'USER', 1, 'Standardbenutzer (Dialog)'), (2, 1, 'GUEST', 1, 'Gastbenutzer'), (3, 1, 'BATCH', 1, 'Hintergrundbenutzer'), (4, 1, 'DEFAULT', 1, 'Standardbenutzer'), (5, 1, 'DEVELOP', 1, 'Entwickler'), (6, 5, 'VIEW', 1, 'Sourcecode einsehen'), (7, 5, 'EDIT', 1, 'Sourcecode ändern'), (8, 1, 'HR', 1, 'Human Resources'), (9, 8, 'VIEW', 1, 'Anzeigeberechtigungen für HR-Daten'), (10, 8, 'EDIT', 1, 'Änderungsbrechtigung für HR-Daten'); CREATE TABLE permission_group_hierarchy ( group_parent_id int(10) unsigned NOT NULL default '0', group_id int(10) unsigned NOT NULL default '0', PRIMARY KEY (group_parent_id,group_id) ); INSERT INTO permission_group_hierarchy VALUES (0, 1), (0, 2), (0, 3), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (0, 10), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (1, 10), (5, 6), (5, 7), (8, 9), (8, 10);
Ich suche jetzt eine Möglichkeit, alle Berechtigungsgruppen, die ein Benutzer hat, auszulesen inklusive der übergeordneten Berechtigungen)
Beispiel:
Ich habe einen Standardbenutzer, der HR-Daten anzeigen darf und volle Entwicklerberechtigungen hat, für diesen Benutzer würde ich gerne die IDs 1, 4, 5, 6, 7, 8, 9 haben.
Das ist ein einfaches
Code:
SELECT DISTINCT g.group_id, g.group_name FROM permission_group g INNER JOIN permission_group_hierarchy h ON g.group_id IN (h.group_id, h.group_parent_id) WHERE h.group_id IN (4, 9, 7) ORDER BY g.group_parent_id
Wenn ich jetzt die Enticklerberechtigungen abschalten will, setze ich group_active für die Gruppe mit ID 5 (DEVELOP) auf 0 und möchte demnach nur noch 1, 4, 8, 9 haben.
Erweitere ich meinSELECT und schließe Berechtigungsgruppen mit group-active = 0 aus, dann bekomme ich allerdings 1, 4, 6, 7, 8, 9.
Kann ich das irgendwie mit einer Abfrage abhandeln oder muss ich da mit PHP ran?
Kommentar