2009-06-02 10 views
0

私たちは、左側のナビゲーションに多くのリンクがあるウェブサイトを持っています。これらのリンクは、ユーザーの機能に基づいて描画されます。 Adminユーザが新しい機能を作成し、それを一部のユーザに割り当てることができる画面があります。
新しい関数が作成されると、私たちの左のナビゲーションページの中にはリンクをペイントする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 

ユーザーIDに対する機能のリストをもたらすクエリは次のとおりです。

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を作るための最良の戦略は何ですか?

答えて

1

は、私はあなたがテーブル

cmp_function_links [function_id, link_url, link_text] 

そして(印刷リンク用)擬似コード

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

私はあなたのリンクは、静的ではなく動的な(最新のユーザーへのリンクのようなものとしなければなりません追加できると思います、など)。

関連する問題