0
我們有一個網站,左側導航有很多鏈接。這些鏈接是基於用戶的功能繪製的。有一個管理員用戶可以創建一個新功能並將其分配給某些用戶的屏幕。
問題是,一旦創建了新函數,我們的代碼就必須更改,因爲在我們的左側導航頁面中,我們有很多if/else子句,基於此我們繪製鏈接。用於管理用戶在網站上訪問的結構
以下是有關表的結構:
cmp_user_role [userid, role_id]
cmp_function [function_id, function_name, url]
cmp_function_role [role_id, function_id]
樣本數據:
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
帶來相對的功能列表,用戶標識的查詢:
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
並在我們的代碼中我們正在做(僞)
if (retrievedFunctionFromDB == "SystemAdmin")
show links pertaining to system Admin
if (retrievedFunctionFromDB == "Debt Access")
show links pertaining to Debt Access
...
除了當用戶決定創建一個新功能並將該功能分配給某個用戶時,我認爲一切都可以。在這種情況下,我們的代碼沒有該函數名稱,因爲我們正在對其進行硬編碼。 ..
什麼是最好的策略,使這種動態w/out改變了很多表結構。