2009-06-02 12 views
0

Wir haben eine Website, wo die linke Navigation viele Links hat. Diese Links sind basierend auf einer Benutzerfunktion gemalt. Es gibt einen Bildschirm, auf dem ein Admin-Benutzer eine neue Funktion erstellen und einigen Benutzern zuweisen kann.
Das Problem ist, dass, sobald die neue Funktion erstellt wird, unser Code geändert werden muss, weil wir in unserer linken Navigationsseite viele if/else-Klauseln haben, auf denen wir die Links malen.Struktur für die Verwaltung des Benutzerzugriffs auf einer Website

Es folgt die Struktur der betroffenen Tabellen:

cmp_user_role [userid, role_id] 
cmp_function [function_id, function_name, url] 
cmp_function_role [role_id, function_id] 

Beispieldaten:

cmp_user_role [userid, role_id] 
M23423 18 
H23414 21 
G23431 44 

cmp_function [function_id, function_name, url] 
0 SystemAdmin Null 
1 Debt Access Null 
8 Audit Reports Null 

cmp_function_role [role_id, function_id] 
18 0 
18 1 
21 8 
44 1 

Die Abfrage, die Liste der Funktionen in Bezug auf eine Benutzer-ID bringt ist:

SELECT f.function_id, f.function_name 
FROM cmp_function f, cmp_function_role p 
WHERE p.role_id 
IN (SELECT DISTINCT role_id FROM cmp_user_role 
WHERE user_id = 'M23423') 
AND p.function_id=f.function_id 

und in unserem Code tun wir (Pseudo)

if (retrievedFunctionFromDB == "SystemAdmin") 
    show links pertaining to system Admin 
if (retrievedFunctionFromDB == "Debt Access") 
    show links pertaining to Debt Access 
... 

Ich denke, alles ist in Ordnung, außer wenn Benutzer beschließt, eine neue Funktion zu erstellen und weist diese Funktion einem Benutzer zu. In diesem Fall hat unser Code diesen Funktionsnamen nicht, da wir ihn fest codieren. ..

Was ist die beste Strategie, um diese dynamische w/out viel von der Tabellenstruktur zu ändern.

Antwort

1

ich glaube, Sie Tabelle hinzufügen könnte

cmp_function_links [function_id, link_url, link_text] 

Und die Pseudo-Code (für Links-Druck) sollte

fetch all roles where user is 
for each role 
    print all links 

sein Ich nehme an, Ihre Links sind statisch, nicht dynamisch (wie Link zu den neuesten Benutzer , etc).

Verwandte Themen