Ich bin nicht gerade das, was man als Datenbank-Guru bezeichnen wuerde, daher hoffe ich mal dass sich hier jemand finden laesst der mir sagen kann ob sich folgende Abfrage noch ein wenig optimieren laesst:
Es gibt 6 Tabellen:
Die Namen sollten selbsterklaerend sein. Fall nicht:
MfG
- Keks
Code:
select
permissions.id
from users
left join users_permissions
on users_permissions.user = users.id
left join users_roles
on users_roles.user = users.id
left join roles_permissions
on roles_permissions.role = users_roles.role
left join permissions
on permissions.id = users_permissions.permission
or permissions.id = roles_permissions.permission
where users.id = 0815
group by (permissions.id)
order by (permissions.id) ASC;
Es gibt 6 Tabellen:
Code:
- users
- roles
- permissions
- users_roles
- users_permissions
- roles_permissions
Ein User (users) soll Berechtigungen (permissions) sowohl ueber die Gruppe
(roles) der/denen er zu zugeordnet ist (roles_permissions), als auch individuell dem user zugeordnete (users_permissions) Berechtigungen erhalten.
users
roles
permissions
users_roles
users_permissions
roles_permissions
(ich habe auf die schnelle kein Programm gefunden mit dem ich ein ordentliches ER-Modell erstellen kann. Daher mal in Textform)

users
- Die Usertabelle mit Grundlegenden informationen ueber den User.
- Spalten: id, name, ...
- Primaerschluessel: id
- Fremdschluessel: -
roles
- Die Tabelle mit den Berechtigungsgruppen
- Spalten: id, name, ...
- Primaerschluessen: id
- Fremdschluessel: -
permissions
- Die Tabelle mit den Verfuegbaren Berechtigungen
- Spalten: id, name, ...
- Primaerschluessen: id
- Fremdschluessel: -
users_roles
- Die Tabelle die die User den Gruppen zuordnet (M zu N Beziehung)
- Spalten: user, role
- Primaerschluessen: (user, role)
- Fremdschluessel: user => users.id, role => roles.id
users_permissions
- Die Tabelle die die User den Berechtigungen zuordnet (M zu N Beziehung)
- Spalten: user, permission
- Primaerschluessen: (user, permission)
- Fremdschluessel: user => users.id, permission => permissions.id
roles_permissions
- Die Tabelle die die Gruppen den Berechtugungen zuordnet (M zu N Beziehung)
- Spalten: role, permission
- Primaerschluessen: (role, permission)
- Fremdschluessel: role => roles.id, permission => permission.id
(ich habe auf die schnelle kein Programm gefunden mit dem ich ein ordentliches ER-Modell erstellen kann. Daher mal in Textform)
MfG
- Keks