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.