我们有一个网站,左侧导航有很多链接。这些链接是根据用户的功能绘制的。管理员用户可以创建一个新功能并将其分配给某些用户 问题是,一旦创建了新函数,我们的代码就必须更改,因为在我们的左侧导航页面中我们有很多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改变大部分表结构的最佳策略是什么。
答案 0 :(得分:1)
我认为你可以添加表格
cmp_function_links [function_id, link_url, link_text]
伪代码(用于打印链接)应为
fetch all roles where user is
for each role
print all links
我认为您的链接是静态的,而不是动态的(例如链接到最新用户等)。