Nous avons un site sur lequel la navigation de gauche a beaucoup de liens. Ces liens sont peints en fonction de la fonction d'un utilisateur. Il y a un écran où un utilisateur Admin peut Créer une nouvelle fonction et l'assigner à certains utilisateurs. Le problème est qu'une fois la nouvelle fonction créée, notre code doit être changé car dans notre page de navigation gauche nous avons beaucoup de clauses if/else, sur la base desquelles nous peignons les liens.Structure pour gérer l'accès des utilisateurs sur un site
Suite est la structure des tables concernées:
cmp_user_role [userid, role_id]
cmp_function [function_id, function_name, url]
cmp_function_role [role_id, function_id]
données Exemple:
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
La requête qui apporte la liste des fonctions par rapport à un code d'utilisateur est:
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
et dans notre code nous faisons (pseudo)
if (retrievedFunctionFromDB == "SystemAdmin")
show links pertaining to system Admin
if (retrievedFunctionFromDB == "Debt Access")
show links pertaining to Debt Access
...
Je pense que tout est ok sauf lorsque l'utilisateur décide de créer une nouvelle fonction et attribue cette fonction à un utilisateur. Dans ce cas, notre code n'a pas ce nom de fonction puisque nous le codons en dur.
Quelle est la meilleure stratégie pour rendre cette dynamique sans changer une grande partie de la structure de la table.