私たちは、左側のナビゲーションに多くのリンクがあるウェブサイトを持っています。これらのリンクは、ユーザーの機能に基づいて描画されます。 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を作るための最良の戦略は何ですか?