Einzelnen Beitrag anzeigen
  #4  
Alt 02.12.2009, 21:47:14
Xor Xor ist offline
Anfänger
 
Registriert seit: Aug 2008
Alter: 35
Beiträge: 124
AW: Eure Meinung: Query zum Rollen- / Rechte-Management

Hi,

Nunja, hier hat man ja eben die Möglichkeit Rechte zu "vererben", da es vorgesehn ist, dass ein User mehrere Rollen inne haben kann (also Benutzer & Administrator, siehe Tabelle "account_roles"). Halte ich nicht für besonders sinnvoll, da man die Rechte für eine einzelne Rolle doch umfassend angeben kann.

Wenn man nun animmt, dass ein User nur eine Rolle annehmen kann könnten wir uns die Tabelle "account_roles" sparen und die "roleID" direkt in die Usertabelle (wie auch immer die ausschaut) schreiben.

bsp. 0-->Standard
1-->Mod
2-->Admin

Also eine roleID.

Weiters würde ich das System des -1 und 1 und der Methode der Summe im Konzept absehen und die individuelle Rechtevergabe-Tabelle prioritär machen (also was individuell vergeben wurde wird zuerst berücksichtigt). Macht für mich mehr Sinn. Also gibt es für die Tabelle "account_rights_adjust" die Einträge 1 und 0, je nach aktiv bzw. inaktiv.

Unter berücksichtigung dieser 2 Änderungen am System könnte man folgende Query einfacher machen: (als user-tabelle wurde "user" mit einer Zelle "roleID" angenommen)

Code:
SELECT rightID, access
FROM (

SELECT rights.rightID AS rightID, account_rights_adjust.adjustment AS access
FROM rights
LEFT JOIN account_rights_adjust ON account_rights_adjust.rightID = rights.rightID
WHERE account_rights_adjust.userID = 1

UNION 

SELECT role_rights.rightID as sameID, 1
FROM role_rights
LEFT JOIN user ON role_rights.roleID = user.roleID
WHERE user.userID =1
) AS tbl
GROUP BY rightID
Das gibt alle Rechte des Users mit einer Rolle aus (Recht-Id und 1 bzw. 0).

Angenommen wird die Tabellenstruktur aus dem oben angegebenen Link.

Ich denke ist praxisbezogener und Performance-freundlicher (eine verschachtelte SELECT weniger, auch kein SUM oder IF).

Was meint Ihr?

Mfg

PS: Tutorials gibt es doch eh schon sehr viel gute, oder? Oder willst du das mehr auf Praxis aufbauen, also mit vielen Beispielen?

Mfg
__________________
Allergisch auf:
  • "Ich brauch ein Script für..."
  • "...dringend..."
  • Anfrage-->Antwort-->Nie wieder melden
Mit Zitat antworten