hallo forum,
ich arbeite gerade an einem authorisations-system für meine website.
dort muss sich der user anmelden und kriegt eine rolle.
beispiele: gast, member, moderator, administrator...
jede website, die sich der user ankucken will lässt eine oder mehrer rollen zu.
ich hab mir dafür eine tabellenstruktur zusammengebastelt:
Sites
-----
SID (die ID der sites - primary key)
Sitename
usw.
User
----
UID (die ID der mitglieder - primary key)
Nickname
usw.
Roules
----
RID (die ID der rollen - primary key)
Bezeichnung
Zuweisungstabellen:
UserRoules
----
UID (primary key) --> User.UID
RID (primary key) --> Roules.RID
SiteRoules
----
SID (primary key) --> Sites.SID
RID (primary key) --> Roules.RID
ich hoffe, die struktur ist einigermassen verständlich erklärt ;)
die abfrag ist in worten eigentlich ganz simpel und sollte der logik nach auf funktionieren.
ich schreibs mal als sql - statement nieder:
SELECT s.SID, u.UID, sr.SID, sr.RID, ur.UID, ur.RID FROM Sites AS s, User AS u, SiteRoules AS sr, UserRoules AS ur WHERE u.UID = ur.UID AND s.SID = sr.SID AND ur.RID = sr.RID
das klappt eigentlich so auch, das heisst, wenn die abfrage daten zurückliefert, ist der benutzer berechtigt die site zu sehen, wenn nicht --> keine berechtigung.
mein problem ist nun die performance. das karthesische produkt dieser 4 tabellen könnte in den himmel wachsen (mein gott, denk ich blumig ;).
ich suche jetzt also nach einer lösung mit JOINS, ich habe mir da schon ein paar sachen angeschaut.
z.b. dies hier:
SELECT A.EineSpalte, B.EineAndereSpalte
FROM Tabelle1 AS A JOIN Tabelle2 AS B
ON A.EinWert = B.EinAndererWert;
aber wie funktioniert das ganze nun über mehr als zwei tabellen? habe leider dazu nix gefunden...
ich habe schon mehrer möglichkeiten selbst ausprobiert, aber ich kriegs nicht auf die reihe :(
wäre froh, wenn mir jemand ein rezept oder einen hinweis geben könnte.
tx a lot im voraus.
llap
Siramon